ThinkAboutSoftware / OnlineSelfCodingGroup

Online coding and study group at every Saturday at 10:30 am.
MIT License
17 stars 4 forks source link

20th online meetup, 2021-04-03, promotion: caffe mocha #47

Closed jongfeel closed 3 years ago

jongfeel commented 3 years ago

https://meet.google.com/jyx-mxnq-kpk

참여 방법:

Assignees에 자신의 github 계정을 self로 추가 2시간 분량의 할 내용에 대해 댓글 작성 (최소 모임 시작 전까지) 빛의 속도 혹은 (주말, 휴일 포함) 최소 3일 내에 구글 캘린더 등록 메일 확인 모임 시간에 각자 개발 관련된 공부 진행

모임 끝난 후 공부한 내용 정리 & 링크 추가 => 최소 다음 모각코 전까지 확인 가능해야 함.

주의: 회사일 혹은 마감 기한 임박한 일 처리의 경우는 최대한 자제해 주세요. 주말 아침에 일하면 우울하니까요. ㅜㅜ

Youtube 음악 재생목록:

음악 취향 강요 공유를 위해 재생목록을 공유합니다. 자유롭게 추가해 주세요. https://www.youtube.com/playlist?list=PLBFc2T4S7JnvZrV92zSlOfqeYHj7-qJfB&jct=hkFSXgrr2X-4yldTm5iMtpqnGcjKRQ

Special promotion

이번에도 20회 모임 달성 기념으로 스페셜 프로모션을 준비했습니다. 이번 모임 참석을 포함해서 4회 참석 달성하시면 스타벅스 까페 모카로 음료가 업그레이드 됩니다. 언젠가 까페 모카로 업그레이드된 음료를 받고 싶으신 분은 이번 모임에 참여해서 꼭 스탬프를 찍으시면 됩니다.

image

wjrmffldrhrl commented 3 years ago

코딩 테스트 준비

풀이

시간 초과 1

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

class Main {

    static String inputString;
    static int inputLength;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        inputString = br.readLine();
        inputLength = inputString.length();
        List<Integer> laserIndexes = new ArrayList<>();
        Stack<Integer> leftSideIndexes = new Stack<>();

        int answer = 0;
        for (int i = 0; i < inputLength - 1; i++) {
            String targetString = inputString.substring(i, i + 2);

            if (targetString.equals("((")) {
                leftSideIndexes.push(i);
            } else if (targetString.equals("()")) {
                laserIndexes.add(i);
            } else if (targetString.equals("))")) {
                int leftSideIndex = leftSideIndexes.pop();
                int rightSideIndex = i;

                long laserCount = laserIndexes.stream()
                        .filter(laserIndex -> laserIndex > leftSideIndex && laserIndex < rightSideIndex).count();

                answer += (laserCount + 1);
            }
        }

        System.out.println(answer);
    }

}

시간 초과 2


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

class Main {

    static String inputString;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        inputString = br.readLine();
        boolean[] isLaser = new boolean[inputString.length()];
        Stack<Integer> leftSideIndexes = new Stack<>();

        int answer = 0;
        for (int i = 0; i < inputString.length() - 1; i++) {
            String targetString = inputString.substring(i, i + 2);

            switch (targetString) {
                case "((":
                    leftSideIndexes.push(i);
                    break;
                case "()":
                    isLaser[i] = true;
                    break;
                case "))":
                    int leftSideIndex = leftSideIndexes.pop();
                    int laserCount = getLaserCount(isLaser, leftSideIndex, i);

                    answer += (laserCount + 1);
                    break;
            }
        }

        System.out.println(answer);
    }

    private static int getLaserCount(boolean[] isLaser, int leftSideIndex, int rightSideIndex) {
        int laserCount = 0;
        for (int i = leftSideIndex; i < rightSideIndex; i++) {
            if (isLaser[i]) {
                laserCount++;
            }
        }

        return laserCount;
    }

}

통과

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

class Main {

    static String inputString;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        inputString = br.readLine();

        boolean[] isLaser = new boolean[inputString.length()];
        Stack<Integer> leftSideIndexes = new Stack<>();

        int answer = 0;
        for (int i = 0; i < inputString.length() - 1; i++) {
            char firstTargetChar = inputString.charAt(i);
            char secondTargetChar = inputString.charAt(i + 1);

            if (firstTargetChar == '(') {
                if (secondTargetChar == '(') {
                    leftSideIndexes.push(i);
                } else {
                    isLaser[i] = true;
                }
            } else if (secondTargetChar == ')') {

                int leftSideIndex = leftSideIndexes.pop();
                int laserCount = getLaserCount(isLaser, leftSideIndex, i);

                answer += (laserCount + 1);
            }
        }

        System.out.println(answer);
    }

    private static int getLaserCount(boolean[] isLaser, int leftSideIndex, int rightSideIndex) {
        int laserCount = 0;
        for (int i = leftSideIndex; i < rightSideIndex; i++) {
            if (isLaser[i]) {
                laserCount++;
            }
        }

        return laserCount;
    }

}

String.substring() 은 새로운 String을 생성하기 때문에 성능상 문제가 생길 수 있다.

앞으로 계획 정리

jongfeel commented 3 years ago

코딩 테스트 준비

  • 백준 문제 풀이

어떤 문제를 풀 예정인지 적어주시면 좋을 것 같아요

Joseph-Cha commented 3 years ago

독서

소프트웨어스팩의 모든 것

1부 소프트웨어 스팩이란?(p24~p41)

정리

마크 다운에 Discussion 중심으로 작성 -> 일단 노션에 작성 완료 향후 컨퍼런스 레포지에 PR을 날릴 예정[링크]

hi-hyein commented 3 years ago

계획

진행중인 스타크래프트 유닛만들기 문서 업데이트 (상세계획링크)

Finish

jongfeel commented 3 years ago

오브젝트

티켓 예매 시스템 예제의 class들을 가지고 실제 예매를 진행하는 main 메소드 작성해 보기 필요한 unit test 추가


https://github.com/jongfeel/objects/pull/6