본문 바로가기

Coding Test

Java 코딩테스트 연습 6일차 (프로그래머스 스쿨 Lv.0, 1073점) 최댓값 만들기 (1) 배열의 원소 두 개를 곱해 최댓값을 만드는 문제로, 최댓값과 그 다음으로 큰 값을 구해 곱하거나, 처음부터 둘을 곱한 값의 최댓값을 구하면 될 것 같다. 나는 아직 sort 메소드를 공부하지 않았으니, 이번에도 3일차 마지막 문제에서 중앙값을 구할 때처럼 더 어려운 방식으로 풀어야 할 것 같다. for i 반복문 안에 for j 반복문을 만들어, 서로 다른 i와 j에 한해 둘을 곱해 주면서 계속 큰 값으로 갱신하는 방법을 선택했다. 그런데 하나가 틀리게 나왔다. 원인은 어이없게도 numbers의 길이가 2부터 시작한다고 해서 i와 j의 index를 1부터 시작한 것 때문이다. 배열의 길이가 길든 짧든 index 0이 없을 리가 없다... 뇌가 어떻게 되었나 보다. 반복문을 0부터 시.. 더보기
Java 코딩테스트 연습 5일차(2) (프로그래머스 스쿨 Lv.0, 1061점) 포스팅이 너무 길어져 둘로 나누게 되었다. 다음은 나머지 4문제들이다. 나이 출력 나이를 출력하는 단순한 문제다. 각도기 각에 따라 다른 결과값을 산출하는 간단한 문제다. 풀긴 했지만 식이 너무 길다. 좋지 않은 풀이다. 삼항 연산자를 이용해 간단하게 푼 solution이다. 역시 안 쓰다 보니 사용할 생각을 안 하게 된다. 익숙하게 하기 위해 이 풀이를 참고하지 않고 다시 삼항 연산자를 이용해 풀어 보았다. 답은 맞았으나 불필요한 조건식이 많이 포함되어 있다. 처음의 0 < angle과 마지막의 90 < angle은 불필요하다. 역시 자꾸 안 써 보니 사용이 서툴게 된다. 의도적으로 자주 사용해야겠다. 식은 간결해졌으나 괄호로 묶어 주면 보다 가독성이 좋아질 것 같다. 가독성이 좋아졌다. 양꼬치 정답률.. 더보기
Java 코딩테스트 연습 5일차(1) (프로그래머스 스쿨 Lv.0, 1055점) 현재 내 실력으로는 최빈값 구하는 문제를 풀 수 없을 것 같아 미뤄 두었었는데, 아침에 뒤척이며 고민하다 갑자기 풀이법이 떠올라서 풀이를 작성하게 되었다. 나머지 문제들은 전부 쉬운 문제들이다. 매일 순서대로 제공하는 문제를 다 풀어버려 앞으로는 정답률이 높은 순으로 풀게 되었기 때문이다. 따라서 최빈값 구하는 문제를 제외한 오늘 푼 문제들은 남은 문제들 중 가장 쉽다. 이 문제들은 포스팅이 너무 길어져 다음 포스팅으로 넘겼다. 최빈값 구하기 척 보기에도 쉽지 않다. 최빈값을 골라내야 하는 것은 물론이고, 최빈값이 여러 개일 경우 또 다르게 -1을 return해야 한다. 원래 내 실력으로 불가능해 보였는데, 조잡하지만 해결 가능한 풀이가 떠올라서 적어 보았다. 설계는 이렇다. 1. for i문으로 arr.. 더보기
Java 코딩테스트 책 구입, 연습 4일차 (프로그래머스 스쿨 Lv.0, 1045점) 결국 이 책을 구입했다. 앞부분을 조금 읽어 봤다. 초반부터 1~n까지의 자연수 합을 구하는 공식인 n(n+1) / 2를 n(n-1) / 2로 적은 치명적인 오타가 있다. 다만 전반적으로 내용은 괜찮아 보인다. 시간 복잡도 부분을 읽다 보니 문제에서의 범위 제한사항은 대략적인 실행시간을 계산하기 위해 있는 것 같다. 물론 for 반복문처럼 반복의 범위를 반드시 정해줘야 하는 경우에도 필요할 때가 있을 것이다. 어쨌든 코드 작성 과정에서 직접 제한하는 작업은 불필요해 보인다. 책의 예제는 Lv.2 문제부터 시작한다. 책을 읽으려면 빨리 Lv.0도 끝내고 Java도 진도를 빨리 끝내야겠다. 시간이 너무 부족하다. 블로그를 하는 것도 원인에 크게 한 몫한다ㅠㅠ 생각보다 시간이 많이 들어간다. 그래도 시작했으니.. 더보기
Java 코딩테스트 연습 3일차 (프로그래머스 스쿨 Lv.0, 1037점) 숫자 비교하기 두 수를 비교해서 다른 값을 return하는 간단한 문제다. 제한사항 조건식은 여기까지만 쓰고 이제 그만 쓰기로 했다. 코드만 길어지고 의미가 없어 보인다. 다른 사람들의 풀이를 보니 이상한 식이 나온다. 내가 이런 것을 공부했었나 싶어 다시 찾아보니 있었다.... 분명 예제 코드까지 작성했었는데 삼항 연산자의 존재조차 잊고 있었다. 반성해야겠다. if 조건문을 사용하는 것보다 간결하다. 이제 꼭 기억해 둬야겠다. 분수의 덧셈 오늘 가장 어려웠던 문제이자 나를 깊은 고통에 빠뜨렸던 문제다. 내가 생각했던 solution은 1. 분모끼리 곱한다. 2. 각 분자는 다른 쪽 분모와 곱한다. 3. 분자끼리 더한다. 4. for문을 이용해 1부터 1000까지 늘려가면서 빠짐없이 약분한다. 즉, 통분.. 더보기
Java 코딩테스트 연습 2일차 (프로그래머스 스쿨 Lv.0, 1019점) Lv.0에서도 낮은 난이도부터 높은 난이도까지 프로그래머스 스쿨에서 따로 지정해 둔 순서가 있다는 것을 알게 되었다. 따라서 나머지 문제들은 그 순서대로 진행해 보기로 했다. 두 수의 합 두 수를 더하는 아주 쉬운 문제다. 얼른 신나게 적고 다른 사람의 풀이를 확인했다. 왼쪽에 주어진 제한사항을 볼 때마다, 그 부분을 내가 직접 제한해서 다른 숫자가 대입된 경우에는 결과가 안 나오게 해야 하는 것인지, 제한사항의 조건에 충족하는 범위 내에서 무조건 올바른 결과가 나오게 해야 된다는 것인지 알 수 없었는데, 이 풀이가 제일 좋아요를 많이 받은 것을 보니 제한을 해야 되는 모양이다. 다음부터는 그렇게 해야겠다. 두 수의 차 다음은 두 수의 차를 구하는, 역시 간단한 문제다. 위의 다른 풀이를 그대로 따라하기.. 더보기
Java 코딩테스트 연습 1일차 (프로그래머스 스쿨 Lv.0, 1013점) 전체 논리구조가 있어 단계별로 이해하고 지식을 쌓아가는 과목의 경우 여러 과목을 병행하기보다 한 과목씩 공부하는 편이 완결성이 높지만, 코딩테스트처럼 사고 훈련을 목적으로 하는 과목의 경우 매일 조금씩 반복하며 감을 잃지 않게 하는 편이 낫다. 따라서 어느 정도 Java 문법을 익힌 지금부터 매일 조금씩 코딩테스트를 풀기로 했다. 원래 코드가 간결하고 쉬운 Python이나 실행속도가 빠른 C++을 공부해 코딩테스트를 준비하는 선택지도 고려했었지만, 실제 개에 사용할 Java 언어를 선택하게 되었다. 앞으로의 공부와 개발 과정에서 계속 Java를 사용할 것이므로, 이후에도 계속 Java로 알고리즘 설계 역량을 기르는 것이 나을 것이다. 코딩테스트 연습은 프로그래머스 스쿨(https://school.prog.. 더보기