1-1. 나만의 방식으로 문제를 이해하여 정리하자.
1-2. 조건을 정확히 이해하고 정리하자.
1-3. 문제의 입력값과 어떤 출력값이 필요한지 파악하자.
2-1. 간단한 예시부터 복잡한 예시 순으로 넣어보자.
2-2. 빈 값과 유효하지 않은 값등 예외케이스를 넣어보자.
2-3. 이때 넣어본다는 의미는 완성된 코드에 넣는다는 것이 아닌 머리속으로 넣어본다는 의미이다.
3-1. 문제를 이해했다면 단계별 수행할 작업을 명시적으로 표시하자.(수도코드)
3-2. 만약 코딩테스트에서 시간이 부족해 통과하지 못했다면 이러한 단계를 명시한 것이 도움이 될 수있다.
4-1. 만약 해결 가능하다면 바로 문제 해결을 시작하고,
4-2. 해결법이 떠오르지 않는다면 세분화하며 간단한 구현부터 시작하자.
5-1. 위에서 해결한 문제는 해결을 위한 방법이였다.
5-2. 이를 리팩토링하여 코드를 정리하고 효율적으로 만드는 것이 실력향상의 지름길이다.
function solution(lottos, win_nums) {
var answer = [];
let correctNumCount = 0;
let zeros = 0;
// 문제 세분화를 코드에 수도코드식으로 적고 해결하자.
// 주어진 로또 번호에서 0을 제외한 당첨 번호의 개수를 저장한다.
lottos.map((num) => win_nums.includes(num) ? correctNumCount += 1 : correctNumCount)
// 주어진 로또 번호에서 0의 개수를 저장한다.
lottos.map((num) => (num === 0) && (zeros += 1))
// 0을 제외한 당첨 번호에 맞는 등수를 저장한다.
const low = 7-correctNumCount <= 5 ? 7-correctNumCount : 6;
// 0을 포한한 당첨 번호에 맞는 등수를 저장한다.
const high = low-zeros <= 1 ? 1 : low-zeros;
answer = [high, low];
return answer;
}
function solution(lottos, win_nums) {
var answer = []
let minSameCnt = 0;
let maxSameCnt = 0;
// 최소 당첨 개수에 0을 제외한 당첨 번호를 넣고, 최대 당첨 개수에 0을 합한 당첨 번호를 넣는다.
lottos.forEach(e => {
if(win_nums.includes(e)){
minSameCnt++;
};
if(win_nums.includes(e) || e===0){
maxSameCnt++;
}
})
// 최대 당첨 개수와 최소 당첨 개수를 통해 당첨 등수를 구한다.
topRank = (7 - maxSameCnt === 7) ? 6 : 7-maxSameCnt;
lowRank = (7 - minSameCnt === 7) ? 6 : 7-minSameCnt;
answer = [topRank, lowRank]
return answer;
}
앞서 주어진 로또 번호에서 0의 개수를 구하여 위에서 구한 일치한 당첨번호 개수와 더한 뒤 최대 당첨 번호의 개수를 구한다.
, 0의 개수를 더하지 않은 개수는 최저 당첨 개수이다.
의 부분을 하나의 for문으로 처리하였다.
최대 등수와 최저 등수의 로직을 동일하게 구현하여 가독성을 높혔다.
=> 관련 문제를 많이 풀고 알고리즘을 이해하는 노력이 필요하다.