programmers 주식가격 처음에 문제를 이해하지 못해 당황했었지만 입출력 예를 보고 어떤 것을 구하는 것인지 알 수 있었습니다. 간단하게 얘기를 하자면 각각의 주식가격 이후 더 낮은 주식가격이 나올 때의 시간(1초 단위로 주식가격 나옴)을 배열에 넣어 구하는 문제였습니다. 저는 Queue를 이용하여 풀었는데요. 간략하게 정리하면 다음과 같습니다. 주어진 시간 배열을 Queue에 담는다 Queue에서 poll()를 이용해 수를 하나 뽑는다 남은 Queue 내에 돌면서 시간(time)을 1씩 증가시키며 뽑았던 수보다 작은 수를 만나면 break한다 반복문 밖에서 time을 List에 넣는다. 2~4까지의 과정을 Queue가 비워질 때까지 반복한다. 물론 할때마다 time은 0으로 초기화 class So..
Today's Dev Notes(2018-11-01) 안녕하세요, Brad입니다. 오늘은 수업시간에 DIP(Dependency Inversion Principle)에 대해서 배웠는데요. 이에 대해서 간략하게 정리해볼께요. 먼저 의존성 역전 법칙(DIP)는 하위 레벨 모듈의 변경이 상위 레벨 모듈의 변경을 요구하는 위계관계를 끊는 것을 의미합니다. 구체적인 것에 의존하는 것을 인터페이스로 바꾸고, 기존 의존받던 것도 그 인터페이스에 의존 받도록 바꾸는 것입니다. 위와 같이 기존에는 LottoGame내에서 생성자를 Money로 받아 그 Money로 AutoLottoGenerator 에 넣음으로써 로또를 생성하였습니다. 로또를 자동으로만 생성해주는 부분에 의존하고 있는 것이죠. 만약 수동과 혼합으로 로또를 생..
Today's Algorithm(2018-10-31) programmers 모의고사 문제 자체는 크게 어렵지 않아 어떻게 좀 더 효율적으로 풀 수 있을지에 초점을 맞춰 설명해보겠습니다. 전 좀 길게 그리고 비효율적으로 푼 것 같아 아쉬운데요. 역시나 다른 사람들은 짧고 효율적으로 풀었더라구요. 비교해봅시다. 각 학생들의 성적을 매기는 과정 저의 코드는 다음과 같습니다. for (int j = 0; j < student.size(); j++) { for (int i = 0; i < answers.length; i++) { if (answers[i] == student.get(j)[index[j]]) { score[j]++; } index[j]++; if (index[j] == student.get(j).l..
Today's Dev Notes(2018-10-31) 안녕하세요, Brad입니다. 오늘은 step3 피드백 받았던 것 마무리했었는데요. 어제 반영한 피드백 내용과 함께 오늘 반영한 DIP 적용(?!) 시도도 기록해볼게요! 우선 어제 받았던 피드백은 다음과 같습니다. Main클래스의 업무 과다 rank.getWinningMoney() 사용을 피하기 → getter()사용 피하기 Lotto번호를 Integer대신 LottoNum처럼 추상화하기 → VO만들어 적용해보기 LottoGame에 DIP원칙 적용해보기 하나씩 살펴보죠. Main 클래스의 업무 과다 Main 클래스에 많은 코드가 담기게 된 이유는 Domain 로직 내 예외를 던져 Main에서 예외처리를 하기 때문입니다. 그래서 control 패키지 내에..
Today's Dev Notes(2018-10-30) 안녕하세요, Brad입니다! 오늘은 '로또' 미션 step3를 진행하고 알고리즘 문제를 하나 풀면서 하루를 보냈네요. 우선 피드백 받은 내용부터 정리해볼게요. Main클래스의 업무 과다 rank.getWinningMoney() 사용 피하기 → getter()사용 피하기 Lotto번호를 Integer대신 LottoNum처럼 추상화하기 → VO만들어 적용해보기 LottoGame에 DIP원칙 적용해보기 피드백은 위와 같이 받았구요. 위 과정을 진행하면서 잔잔한 수정사항이 있었습니다. 예외처리, 상수들을 한 클래스로 몰아서 처리하는 것 분리하기 이전에 구현할 때는 이게 몰아서 있는데 좋다고 생각했었습니다. 왜냐하면 뭔가 변경사항이 있을 때 모여있는 곳에서 찾..
Today's Algorithm(2018-10-30) programmers 소수의 합 소수를 이용하여 푸는 문제가 있을 때 가장 효율적인 방법은 '에라토스테네스의 체'를 이용하는 방법입니다. 이름은 어렵지만 구현이나 아이디어 자체는 크게 어렵지 않습니다. '에라토스테네스의 체'는 다음과 같이 구현할 수 있습니다. 소수인지 아닌지 체크할 수 있는 배열을 하나 만들고 안에 boolean 값으로 true 를 모두 넣어둔다 본격적으로 작업을 처리하기 전에 1보다 작거나 같은 수는 return처리하여 종료시킨다 2부터 for문을 돌면서 해당 수가 소수 체크 배열에 true값인지 확인한다. true값이면 우선 그 수는 소수로 등록시키고, 그 수의 배수는 false 처리하여 이후 처리에서 제외시킨다 3번째 과정이 핵..