본문 바로가기

코딩테스트

Java 코딩테스트 연습 14일차 (프로그래머스 스쿨 Lv.0, 1186점) 어제 포스팅한 대로 오늘은 정답률 높은 순으로 세 문제를 더 풀게 되었다. 내일부터는 교재로 공부할 예정이다. 개인 기록 및 정리용 블로그이므로, 기록이 유의미해지려면 포스팅 과정에서 교재의 해설 내용이 부분 삽입되어야 한다. 교재는 영리 목적으로 제작된 것이기에 당분간은 불가피하게 코딩테스트 관련 포스팅을 쉬게 되었다. 다른 글은 계속 올릴 예정이다. 대문자와 소문자 이 문제는 푸는 데 좀 고생했다. 알파벳의 아스키 코드를 모르기 때문이다. 알파벳이 26개니까 대문자와 소문자의 아스키 코드가 26 차이가 날 거라고 생각했다. 대문자가 먼저인지 소문자가 먼저인지 몰라 일단 소문자가 먼저인 것으로 가정하고 계산해 봤다. 그런데 array 배열을 String 타입으로 선언했다. charAt 메소드의 결과들을.. 더보기
Java 코딩테스트 연습 13일차 (프로그래머스 스쿨 Lv.0, 1183점) 옹알이 (1) 대망의 정답률 29%짜리 문제다. 원래 계획은 하루종일 이 문제의 풀이를 고민하며 보내는 거였다. 그런데 허무하게도 생각보다 너무 금방 풀어 버렸다. 정답률이 왜 이렇게까지 낮은지 사실 잘 모르겠다. 하지만 이 문제를 풀면서, 교재에서 Lv.2 문제를 풀기 전에 Java를 더 공부해 둬야 할 필요성을 느꼈다. 그래서 원래 계획과 달리 정답률 높은 순으로 세 문제 더 풀게 되었다. 내일도 정답률 높은 순 세 문제를 더 풀고 남은 시간에 Java를 더 공부한 뒤, 모레부터 코딩테스트 문제풀이 전략 교재의 문제를 풀 생각이다. 처음 떠올린 방법은 contains() 메소드를 이 4가지 문자열들을 포함하는지 검사하고, 길이를 이용해 조건식을 만드는 것이었다. 문자열 종류가 4개이므로 한 문자열만 .. 더보기
Java 코딩테스트 연습 12일차 (프로그래머스 스쿨 Lv.0, 1176점) 안전지대 나에게는 상당히 어려운 문제였다. 지뢰가 있는 칸과 그 주변 8칸이 위험지역이고, 안전지역의 수를 계산해서 return해야 하는 문제다. 처음에는 지뢰의 위치에 따라 주변의 위험지역을 계산해 보려 했는데 고려해야 할 경우의 수가 너무 많아 잘 안 됐다. 그래서 고민하던 중, for 반복문을 이용해 모든 칸을 돌면서 위험지역인지 여부만 판단하는 방식으로 바꾸어서 푸니 보다 쉬워졌다. class Solution { public int solution(int[][] board) { int answer = n * n; for (int i = 1; i < board.length; i += 3) { for (int j = 1; j < board[i].length; j += 3) { if (board[i][.. 더보기
Java 코딩테스트 연습 11일차 (프로그래머스 스쿨 Lv.0, 1146점) OX 퀴즈 덧셈, 뺄셈 연산식 배열의 답이 맞으면 "O", 틀리면 "X"를 담은 배열을 return하는 문제다. 어제 다른 풀이에서 봤던 " "를 기준으로 나누는 방법이 제일 쉬울 것 같다. for 반복문 안에서 split 메소드를 이용해 quiz 배열의 각 원소들을 공백 기준으로 나눴다. split[0] 위치에 있는 첫 번째 수와 split[2]의 두 번째 수, 결과값인 split[4]를 int형으로 변환한 값을 각각 firstNum, secondNum, result 변수에 대입했다. result는 앞에 -가 붙을 수 있으므로 -가 있을 때와 없을 때로 나눠 계산한다. answer의 결과값 대입에는 삼항 연산자를 써 봤는데, 이것 저것 오류가 많이 났다. 괄호가 문제인 것 같은데 도통 이유를 모르겠다... 더보기
Java 코딩테스트 연습 10일차 (프로그래머스 스쿨 Lv.0, 1130점) 오늘과 내일, 모레는 lv.0 문제를 정답률 낮은 순으로 3문제씩 풀고, 글피부터 프로그래머스 코딩 테스트 문제 풀이 전략 : 자바 편에 나오는 문제를 풀기 시작할 예정이다. 원래 오늘과 내일 5문제씩 풀 예정이었지만 예상보다도 시간이 너무 오래 걸려서 하루 연장했다. 마지막 문제는 정답률이 29%라 어차피 못 풀 것 같기에, 마지막에 시도해 보고 실패하면 나중에 다시 풀어 보기로 했다. 마음 같아서는 lv.0 문제를 다 풀어보고 싶지만 Java 공부를 메인으로 하며 병행하다 보니 너무 오래 걸릴 것 같다. 앞으로 풀 것은 어려운 문제들이라 하루에 푸는 문제 수는 더 적어지겠지만, 얻는 것은 더 많을 것이다. 4월 5일부터 프로그래머스 스쿨에서 진행하는 코딩테스트 실력 UP 패키지 수업을 등록했는데, 수.. 더보기
Java 코딩테스트 연습 8일차 (프로그래머스 스쿨 Lv.0, 1095점) 아이스 아메리카노 내가 좋아하는 아이스 아메리카노(나도 얼죽아) 문제다. 난이도는 허무할 정도로 쉽다. 몫이 첫 번째 원소, 나머지가 두 번째 원소가 되도록 하면 된다. 특정 문자 제거하기 그동안 String 문제를 안 풀었더니 method도 생각 안 나고 어렵다. 책에서 replace method를 찾아서 풀었다. String 복습을 자주 해야겠다. 문자 반복 출력하기 엄청난 난관에 부딪혔다. String 문제를 거의 안 풀어 봤는데, 문자를 반복하는 방법 따위 알 수가 없다. 적어도 내가 아는 방법 중에는 없다고 생각했다. 문자열을 n으로 곱해 봤다. 역시 안 된다. 이 와중에 또 조건식에 length method가 아닌 field를 적은 모습이다. 배열 문제만 계속 풀었다 보니 자꾸 틀린다. 허무하.. 더보기
Java 코딩테스트 연습 7일차 (프로그래머스 스쿨 Lv.0, 1088점) 오늘도 정답률 높은 순으로 풀었다. 미리 순서를 보고 시작했는데, 풀고 올 때마다 정답률 높은 문제가 실시간으로 바뀌어 정신이 없다. 그 정도로 동시에 풀이를 진행하는 사람이 많은가 보다. 머쓱이보다 키 큰 사람 쉬운 문제다. for 반복문에서 height보다 큰 array의 원소가 나올 때마다 answer을 1씩 올려주면 될 것 같다. 제대로 확인 안 하고 꼭 한 번씩 틀려서 스트레스를 많이 받는다. if 조건식에 array[i]가 들어가야 하는데 i를 넣어 버렸다. 짝수 홀수 개수 이것도 쉬운 문제다. 짝수와 홀수가 나올 때마다 answer[0]과 answer[1]의 원소를 하나씩 늘려 주면 된다. 또 식을 제대로 안 썼다. 바로 제출을 안 해도 되니 꼼꼼하게 안 쓰고 코드 실행부터 눌러보는 버릇을 .. 더보기
Java 코딩테스트 연습 6일차 (프로그래머스 스쿨 Lv.0, 1073점) 최댓값 만들기 (1) 배열의 원소 두 개를 곱해 최댓값을 만드는 문제로, 최댓값과 그 다음으로 큰 값을 구해 곱하거나, 처음부터 둘을 곱한 값의 최댓값을 구하면 될 것 같다. 나는 아직 sort 메소드를 공부하지 않았으니, 이번에도 3일차 마지막 문제에서 중앙값을 구할 때처럼 더 어려운 방식으로 풀어야 할 것 같다. for i 반복문 안에 for j 반복문을 만들어, 서로 다른 i와 j에 한해 둘을 곱해 주면서 계속 큰 값으로 갱신하는 방법을 선택했다. 그런데 하나가 틀리게 나왔다. 원인은 어이없게도 numbers의 길이가 2부터 시작한다고 해서 i와 j의 index를 1부터 시작한 것 때문이다. 배열의 길이가 길든 짧든 index 0이 없을 리가 없다... 뇌가 어떻게 되었나 보다. 반복문을 0부터 시.. 더보기