2021.04.27
26일차
입사 51일차.
매주 화요일에 알고리즘 문제를 하나씩 풀어보기로 정했다.알고리즘에 능숙한 편은 아니므로, 프로그래머스 레벨1 문제 위주로 풀어볼 예정이다.
1. 문제 (링크)
문제 설명
로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다.
|
크게 어렵지 않은 문제다.
이런 문제들을 풀때는 코딩테스트에 유용한 메소드들을 많이 사용해보고 필요할때 가져다 쓰면 된다.
이번 문제는 Arrays.binarySearch( 배열, 찾을 값 ); 메소드를 이용하면 쉽게 풀 수 있다.
2. 풀이
import java.util.Arrays; class Solution { public int[] solution( int[] lottos, int[] win_nums ) { // Arrays.binarySearch()는 정렬을 하지 않으면 원하는 값을 받을 수 없다. Arrays.sort(lottos); Arrays.sort(win_nums); // 정답번호와 일치하는 갯수를 저장하는 correctCnt, 그리고 0의 갯수를 저장하는 zeroCnt를 선언 및 초기화 int correctCnt = 0; int zeroCnt = 0; // Arrays.binarySearch()는 일치하면 index를 리턴, 일치하지 않을 경우 -값을 리턴한다. for (int i = 0; i < win_nums.length; i++) { if (Arrays.binarySearch(lottos, win_nums[i]) > -1) correctCnt++; } // 0이 모두 일치하면 최고순위가 되고, 0이 모두 불일치하면 최저순위가 된다. for (int i = 0; i < lottos.length; i++) { if(lottos[i] != 0) break; zeroCnt++; } int[] answer = { chkRank(correctCnt), chkRank(correctCnt + zeroCnt) }; // 배열의 첫번째 값은 최고순위, 두번쨰 값은 최저순위로 저장해야한다. if (chkRank(correctCnt) > chkRank(correctCnt + zeroCnt)) { answer[0] = chkRank(correctCnt + zeroCnt); answer[1] = chkRank(correctCnt); } return answer; } // 일치하는 갯수에 따라 순위를 리턴해주는 메소드를 만들어준다. public int chkRank(int matchCnt) { int result = 0; switch(matchCnt) { case 6: result = 1; break; case 5: result = 2; break; case 4: result = 3; break; case 3: result = 4; break; case 2: result = 5; break; default : result = 6; break; } return result; } } |
배열에서 특정값을 찾아내는 메소드만 알고있다면 쉽게 풀 수 있는 문제라고 생각한다.당분간은 2021 Dev-Matching: 웹 백엔드 개발자(상반기) 문제를 계속 풀어봐도 될 것 같다.
'코딩테스트' 카테고리의 다른 글
[코테/JAVA] 2021 카카오 채용연계형 인턴십 : 숫자 문자열과 영단어 (0) | 2021.10.11 |
---|---|
[코테/JAVA] 월간 코드 챌린지 시즌3 : 없는 숫자 더하기 (0) | 2021.10.11 |
[코테/JAVA] 월간 코드 챌린지 시즌1 : 내적 (0) | 2021.05.06 |
[코테/JAVA] 2021 Dev-Matching: 웹 백엔드 개발자(상반기) : 행렬 테두리 회전하기 (0) | 2021.05.02 |
[코테/JAVA] 2021 KAKAO BLIND RECRUITMENT 신규 아이디 추천 (0) | 2021.04.19 |
댓글