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 | 31 |
Tags
- 프로그래머스 데브코스 프론트엔드
- TypeScript 문법 소개
- react 프로젝트 리팩토링
- frontend roadmap study
- KDT 프로그래머스 데브코스 프론트엔드
- 인프런 자바스크립트 알고리즘 문제풀이
- KDT 프로그래머스
- 리팩토링 회고
- 우테캠 회고록
- 프로그래머스 데브코스 프론트엔드 TIL
- 프로그래머스 K_Digital Training 프론트엔드
- 모던 javascript Deep Dive
- useEffect return
- Vue3 Router
- 프로그래머스 데브코스
- 모던 자바스크립트 딥다이브
- react customHook 예시
- 프로그래머스 K_Digital Training
- Frontend Roadmap
- 모던 자바스크립트 TIL
- 개발자 특강
- K_Digital Training
- 백준 node.js
- useRef 지역 변수
- 모던 자바스크립트 Deep Dive
- 머쓱이
- 백준 js
- Vue3
- 모던 자바스크립트 Deep Dive TIL
- 투포인터알고리즘 js
Archives
- Today
- Total
프론트엔드 개발자의 기록 공간
[프로그래머스 JavaScript] 1차 다트게임 본문
프로그래머스 Level1 [1]차 다트게임 -> 2018 KAKA BLIND 문제
문제 설명 : 3판의 다트게임의 접수를 합산하면 되는데 각 게임당 조건을 수행해주면된다.
볼링에서 스트라이크, 스페어 처리시 가중치를 두는 개념과 유사하다.
저는 문제접근을 다음과 같이 구상했습니다.
1. 다트 게임당 점수를 가지고 있는 cnt 배열을 이용하여 각 라운드의 점수를 저장한다.
2. 반복문을 돌면서 점수, 보너스, 옵션 3가지 경우를 나누어 줍니다.
3. 나눈 경우에 해당하는 조건식에 해당하는 연산을 수행해줍니다.
function solution(dartResult) {
var answer = 0;
let score = 0;
let cnt = [];
for (let i = 0; i < dartResult.length; i++) {
//점수가 주어질때
if (!isNaN(dartResult[i])) {
//i-1이 1이고 i가 숫자면 10점..
//즉 10점인 경우와 그 외의 경우 처리
score = Number(dartResult[i - 1]) === 1 ? 10 : Number(dartResult[i]);
//보너스 S일때
} else if (dartResult[i] === "S") {
cnt.push(score);
//보너스 D일때
} else if (dartResult[i] === "D") {
cnt.push(Math.pow(score, 2));
//보너스 T일때
} else if (dartResult[i] === "T") {
cnt.push(Math.pow(score, 3));
//옵션 *일떄
} else if (dartResult[i] === "*") {
cnt[cnt.length - 2] = cnt[cnt.length - 2] * 2;
cnt[cnt.length - 1] = cnt[cnt.length - 1] * 2;
//옵션 #일때
} else if (dartResult[i] === "#") {
cnt[cnt.length - 1] = -1 * cnt[cnt.length - 1];
}
}
//3개의 점수 합산
answer = cnt.reduce((acc, cur) => acc + cur, 0);
return answer;
}
코드 설명 : 문자열 반복문을 통해 점수, 보너스, 옵션의 조건으로 나누어 줍니다.
점수일 경우는 10점일 경우가 있으므로 이 경우는 i-1 배열의 값이 1인지 판별해줍니다.
score에 점수를 저장 후, 보너스 조건에 따라 제곱근 연산을 해주고 cnt배열에 넣어줍니다.
만약 옵션이 있다면 cnt배열의 값을 해당 옵션 조건에 따라 연산을 해주고 저장해주면 됩니다.
위의 과정을 수행하고 나면 각 라운드당 점수가 cnt 배열에 담겨있고 그것을 합산한 후, 리턴해주면 됩니다.
* 처음 구상했을때는 정규표현식을 이용해서 각 라운드 별로 쪼갠후, 계산해줄려 했다.
하지만 정규표현식 사용이 서툴러서 10점인 경우를 판별하지 못해 그냥 위의 과정대로 해결했다.
혹시 라운드별로 나누어 계산하고 싶은 사람은 다음의 방법을 이용하면 될 것 같다.
(프로그래머스 다른 사람풀이 참고)
let darts = dartResult.match(/\d.?\D/g);
역시 카카오 문제는 level1이 아닌거 같다..
728x90
'알고리즘_JS > 프로그래머스_Level1' 카테고리의 다른 글
[프로그래머스 JavaScript] 숫자 문자열과 영단어 (0) | 2021.07.11 |
---|---|
[프로그래머스 JavaScript] 가운데 글자 가져오기 (0) | 2021.07.11 |
[프로그래머스 JavaScript] 2016년 (0) | 2021.06.09 |
[프로그래머스 JavaScript] 1차 비밀지도 (0) | 2021.06.09 |
[프로그래머스 JavaScript] 로또의 최고 순위와 최저 순위 (0) | 2021.06.09 |
Comments