1단계 무난히 풀수 있는 문제 였습니다.
if문과 for문만 잘 사용한다면 쉽게 풀 수 있을거 같습니다
정렬해서 푸는 방법도 있지만, 저는 정렬을 사용하지 않고 풀었습니다.
나의 풀이
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
int[] answer = new int[2];
for(int i=0; i<lottos.length;i++){
if(lottos[i]==0){//로또 번호 0인값 체크
answer[0]++; // 0번째 인덱스에는 최대 많이 맞춘 갯수를 넣기 위해 추가
continue;
}
for(int j=0; j<win_nums.length;j++){
if(lottos[i]== win_nums[j]){ //로또번호가 맞을 경우
answer[0]++;// 0번째 인덱스에는 최대한 많이 맞춘 갯수를 넣기위해 추가
answer[1]++;// 1번째 인덱스는 가장 적게 맞춘 갯수를 넣기 위해 일치할때만 증가
break;
}
}
}
for(int i=0; i<2;i++){ // 0번째, 1번째 인덱스
if(answer[i]==6)answer[i]=1; //1등
else if(answer[i]==5)answer[i]=2;//2등
else if(answer[i]==4)answer[i]=3;//3등
else if(answer[i]==3)answer[i]=4;//4등
else if(answer[i]==2)answer[i]=5;//5등
else answer[i]=6;//꼴등
}
return answer;
}
}
다른 풀이
import java.util.HashMap;
import java.util.Map;
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();
int zeroCount = 0;
for(int lotto : lottos) {
if(lotto == 0) {
zeroCount++;
continue;
}
map.put(lotto, true);
}
int sameCount = 0;
for(int winNum : win_nums) {
if(map.containsKey(winNum)) sameCount++;
}
int maxRank = 7 - (sameCount + zeroCount);
int minRank = 7 - sameCount;
if(maxRank > 6) maxRank = 6;
if(minRank > 6) minRank = 6;
return new int[] {maxRank, minRank};
}
}
아직 검색이나 자동완성이 없는 경우
Map, Set 같은 자료구조를 사용하기 힘들어서 시도해보지 못했다.
자동완성이 없을 때도 사용 할 수 있게 연습을 계속 해야겠다.
https://programmers.co.kr/learn/courses/30/lessons/77484?language=java#
'알고리즘' 카테고리의 다른 글
[ 알고리즘 유형] 투 포인터 알고리즘 (Two Pointer Algorithm) (0) | 2024.08.21 |
---|---|
[백준] 4963 : 섬의개수 - JAVA (0) | 2021.12.07 |
[백준] 2178 : 미로탐색 - JAVA (0) | 2021.11.01 |