웹/Javascript

javascript 코딩 테스트 - 로또의 최고 순위와 최저 순위(2021 Dev-Matching)

공대생철이 2021. 12. 21. 11:03
728x90

문제풀이 사고 과정

 

1. lottos에 있는 숫자는 0과 0이 아닌 숫자로 구별된다.

2. 0이 아닌 숫자들의 정답 개수를 확인한 후 0의 개수에 따라 최고 순위가 바뀐다. (최저 순위는 변동 X)

ex. 0 3개, 0이 아닌 숫자 3개일 때 3개 중 1개만 일치한다면 최저 정답 개수는 1개로 고정

3. 정답개수 + 순위 = 7 (예외: 정답 개수가 0 이하)

 

0의 개수와 0이 아닌 숫자 중 정답 개수를 각각 zeroCount, accordCount 변수 선언

 

lottos 배열은 forEach 반복문을 돌면서 0이면 zeroCount 개수 올라가고

 

0이 아니면 win_nums 배열을 또 돌면서 일치하는 숫자가 있는지 없는지 확인 

 

있다면 accordCount 개수 올라간다.

 

사고 과정 3번에 의해 순위 = 7 - 정답 개수다.

 

예외 경우가 일치하는 숫자 개수가 0일 때이다. ( 7-0 = 7, 순위는 6등까지 밖에 없음)

 

정답 개수가 0일 때는 또다시 0이 6개인 경우와 아닌 경우로 구별된다. 

 

해당 경우에 따른 정답은 고정 답이므로 그냥 answer 배열에 정답을 push 해준다.

 

이외의 경우 zeroCount만큼 순위가 올라갈 수 있으므로 최고 순위  = rank - zeroCount, 최저 순위 = rank

 


처음에 풀었을 때 테스트는 통과했으나 accordCount가 0인 경우 중 zeroCount가 없는 경우를 놓쳐서 틀렸었다.

 

아무래도 정답을 하나로 찍어주는 방식으로 풀었다 보니 예외 경우를 모두 찾지 않으면 버그가 발생하는 방식이었다.

 

경우에 따라 정답을 계산하는 방식이 아니라 정해주는 방식이라 코린이로써 조금 찝찝하긴 한데

 

그래도 결괏값은 어찌어찌 나왔으니 됐다.

 

지금은 클린 코드보다는 어떻게는 굴러가는 시스템을 만들어보는 게 더 중요하다고 생각하기 때문이다ㅎㅎ

728x90