1. 문제에 대한 이해
- 우리가 풀어야 할 문제는 무엇인가?
- 점수 N이 주어졌을 때 럭키 스트레이트를 사용할 수 있는 상태인지 아닌지 구하라 - 주어진 자료는 무엇인가?
- 현재 점수 N
- 특정 조건 = 현재 캐릭터의 점수를 N이라고 할 때 자릿수를 기준으로 점수 N을 반으로 나누어 왼쪽 부분의 각 자릿수의 합과 오른쪽 부분의 각 자릿수의 합을 더한 값이 동일한 상황 - 조건은 무엇인가?
- N의 자릿수는 항상 짝수이다.
2. 계획
- N을 쪼개서 배열로 만든다.
- 이를 인덱스0부터 절반까지 순회한 것과 절반부터 마지막 인덱스까지 순회한 것을 비교한다.
- 같으면 LUCKY를 리턴하고 같지 않으면 READY를 리턴한다.
3. 실행
- 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (N) => {
// N을 쪼개서 배열로 만든다.
const num = N.toString().split('').map((it) => Number(it));
// 이를 인덱스0부터 절반까지 순회한 것과 절반부터 마지막 인덱스까지 순회한 것을 비교한다.
let left = 0;
let right = 0;
for (i = 0; i < num.length / 2; i++) {
left += num[i]
}
for (i = num.length / 2; i < num.length; i++) {
right += num[i]
}
// 같으면 LUCKY를 리턴하고 같지 않으면 READY를 리턴한다.
return left === right ? 'LUCKY' : 'READY'
}
test('luckyOrReady', () => {
expect(solution(123402)).toEqual('LUCKY');
expect(solution(7755)).toEqual('READY');
})
4. 반성
- 누적값 구하는 부분을 reduce로 풀어볼 수 있을 것 같다.
const solution = (N) => {
// N을 쪼개서 배열로 만든다.
const num = N.toString().split('').map((it) => Number(it));
// 이를 인덱스0부터 절반까지 순회한 것과 절반부터 마지막 인덱스까지 순회한 것을 비교한다.
const left = num.slice(0, num.length / 2).reduce((acc, cur) => acc + cur);
const right = num.slice(num.length / 2).reduce((acc, cur) => acc + cur);
// 같으면 LUCKY를 리턴하고 같지 않으면 READY를 리턴한다.
return left === right ? 'LUCKY' : 'READY'
}
'코테연습' 카테고리의 다른 글
139. N개의 최소공배수 Javascript (0) | 2022.09.15 |
---|---|
137. 이것이 코딩 테스트다 : 12장 문자열 재정렬 Javascript (0) | 2022.09.15 |
135. 영어 끝말잇기 Javascript (0) | 2022.09.15 |
134. 다음 큰 숫자 Javascript (0) | 2022.09.14 |
133. 이것이 코딩 테스트다 : 11장 문자열 뒤집기 Javascript (0) | 2022.09.14 |
댓글