Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 정규표현식
- hash
- CSS
- JavaScript
- 브루트포스
- state
- 병합 정렬
- 해시
- 합병 정렬
- 기술면접
- 알고리즘
- 리액트
- 연결리스트
- react
- 자바스크립트
- Node
- 코테
- 최소공배수
- 자료구조
- 딥다이브
- sort
- 코딩테스트
- 완전탐색
- 정렬
- node.js
- BOJ
- JS
- 백준
- 프로그래머스
- useState
Archives
- Today
- Total
가치투자자
[프로그래머스] 다트 게임 본문
728x90
반응형
Programmers : 다트 게임
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/17682
💬 문제
이 문제는 문자열 과 조건문 에 대한 이해가 있다면 충분히 풀 수 있는 문제였다.
- 총 3번 다트를 던질 수 있으며, 각 기회마다 0~10점을 얻을 수 있다.
- S(1제곱), D(2제곱), T(3제곱) 영역이 존재하며, 각 영역 당첨시 해당 점수가 영역만큼 제곱이 된다.
- 스타상(*) 영역
- 스타상 당첨시 바로 전에 얻은 점수와 현재 해당 점수가 2배가 된다
- 첫 번째 기회에서 스타상 당첨시 해당 점수만 2배가 된다
- 스타상의 효과는 다른 스타상의 효과와 중첩될 수 있으며, 중첩된 경우는 4배가 된다 - 아차상(#) 영역
- 아차상 당첨시 해당 점수는 마이너스가 된다
- 스타상의 효과는 아차상의 효과와 중첩될 수 있으며, 이때 -2배가 된다
728x90
💡 입출력 예시
4번째 예제는 1S*2T*3S다.
먼저, 1의 1제곱이고 스타상이 적용되어 2배가 된다. 그리고 2의 3제곱에 스타상이 적용되고, 앞선 1에도 스타상이 중첩 적용된다. 마지막으로 3의 1제곱이 온다. 따라서 1*2*2 + (2의 3제곱)*2 + 3이므로, 4+16+3 = 23이다.
5번째 예시는 1D#2S*3S다.
먼저, 1의 제곱이고 아차상이 적용되어 -1이 곱해진다. 그리고 2의 1제곱에 스타상이 적용되며, 앞선 1에 스타상과 아차상이 중첩 적용된다. 마지막으로, 3의 1제곱이 온다. 따라서 (1의 제곱)*(-1)*2 + 2*2 + 3이므로, -2+4+3=5이다.
반응형
🔑 풀이1 : switch 조건문
여러 if 조건문을 고려해야 하므로 switch문을 사용했다.
- 문자열 dartResult의 문자 각각을 item에 할당해준다.
- 만약 item이 정수일 경우, tmp에 그 정수 값을 임시로 저장해둔다
- 정수가 10일 수 있고, 이 경우에 tmp에 1이 저장된 상태이므로, 앞선 문자가 1일 경우 10으로 바꿔준다 - 문자가 정수가 아니라면, 각 제곱 조건을 따져준다.
- 만약 S(1제곱)일 경우는 1배이므로 정수 tmp 그대로 answer에 넣어준다
- 만약 D(2제곱)일 경우, 정수 tmp를 제곱하여 answer에 넣어준다
- 만약 T(3제곱)일 경우, 정수 tmp를 3제곱하여 answer에 넣어준다 - 스타상과 아차상 조건을 따져준다.
- 스타상은 이전 정수값과 현재 정수값을 2배로 해줘야 하므로, 기존 값을 2배로 재할당해준다
- 아차상은 현재 정수값에 -1을 곱해준다 - 최종적으로, answer에 담긴 모든 값을 다 더해 출력해준다.
function solution(dartResult) {
const answer = [];
let tmp;
for (let i=0; i < dartResult.length; i++) {
let item = dartResult[i];
if (!isNaN(Number(item))) { // 정수라면
tmp = dartResult[i-1] == 1 ? 10 : Number(item);
} else {
switch (item) {
case 'S': answer.push(tmp);
break;
case 'D': answer.push(Math.pow(tmp, 2));
break;
case 'T': answer.push(Math.pow(tmp, 3));
break;
case '*':
answer[answer.length-2] = answer[answer.length-2] * 2;
answer[answer.length-1] = answer[answer.length-1] * 2;
break;
case '#':
answer[answer.length-1] = answer[answer.length-1] * (-1);
break;
}
}
}
return answer.reduce((acc, cur) => acc + cur, 0);
}
실행 결과와 채점 결과는 다음과 같다.
</> 끊임없이 성장하기 위해 공부한 내용을 글로 작성하고 있습니다. 틀린 부분이나 추가해야 할 부분이 있다면 언제든 댓글로 남겨주세요❗️
728x90
반응형
'Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 오픈채팅방 (0) | 2023.07.13 |
---|---|
[프로그래머스] n진수 게임 (0) | 2023.07.12 |
[프로그래머스] k진수에서 소수 개수 구하기 (0) | 2023.07.05 |
[프로그래머스] 실패율 (0) | 2023.06.29 |
[프로그래머스] 뉴스 클러스터링 (0) | 2023.06.29 |