일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- programmers
- 리액트
- 코어 자바스크립트
- SQL 고득점 Kit
- 정재남
- 백준
- js
- 파이썬
- codestates
- til
- 자바스크립트
- 리트코드
- 리덕스
- 알고리즘
- 렛츠기릿 자바스크립트
- 타입스크립트 올인원
- HTTP
- 토익
- 타임어택
- javascript
- 타입스크립트
- 2주 프로젝트
- 제로초
- 코드스테이츠
- python
- 회고
- 프로그래머스
- LeetCode
- 4주 프로젝트
- 손에 익히며 배우는 네트워크 첫걸음
Archives
- Today
- Total
Jerry
[프로그래머스] 다트지도 본문
첫번째 시도
이런... 보기 좋게 꼬여버려 시간내에 못 품
원인은 parameter인 dartResult에서 숫자와 문자 구별을 하기 위한 판별 로직이 정립이 안 됐다.
풀이 코드에선 isInteger를 사용했는데, 유용해보인다.
그 이유는,
Number.isInteger() - JavaScript | MDN
The Number.isInteger() method determines whether the passed value is an integer.
developer.mozilla.org
위 메서드는 숫자 이외의 타입이 파라미터로 입력되면, false를 반환한다.
나처럼 "굳이 indexof 같은 메서드를 사용할 필요가 전혀~ 없다"? 고 지금까지 생각이 든다.
일단 1차 시도는 이렇고, 다음에 한 번 더 풀어보겠다!
function solution(dartResult) {
/*
3번의 기회
각 0~10점
S / D / T 영역 : 점수 ** 1 / 점수 ** 2 / 점수 ** 3
옵션
* : 스타상 - 직전 점수의 각 2배 + 중첩 가능
# : 아차상 - 해당 점수 마이너스화 + 스타상과 중첩시 동일하게 적용
'' : 없는 경우도 존재한다
=> 0~10 정수 + S/D/T/''*''/# 문자열 의 총 점수를 반환
*/
let answer = 0;
let cnt = 0;
let eachScore = [];
let numbers = '012345679';
dartResult.split('').reduce((acc, cur, idx) => {
// console.log('acc : ' + acc, ', cur : ' + cur, ', idx : ' + idx, ', \\ ' + Number(cur), typeof Number(cur));
let check = numbers.indexOf(cur);
console.log(check, typeof check);
if (check < 10 && check !== -1 && check !== NaN) {
eachScore.push(cur);
cnt += 1;
}
//else if (typeof cur === 'string' && cur === 'S') {
// eachScore[idx - 1] = eachScore[idx - 1] ** 1;
// } else if (typeof cur === 'string' && cur === 'D') {
// eachScore[idx - 1] = eachScore[idx - 1] ** 2;
// } else if (typeof cur === 'string' && cur === 'T') {
// eachScore[idx - 1] = eachScore[idx - 1] ** 3;
// } else if (typeof cur === 'string' && cur === '*') {
// eachScore.map((el, idx) => {
// if (idx + 1 <= cnt) el *= 2;
// })
// } else if (typeof cur === 'string' && cur === '#') {
// eachScore.map((el, idx) => {
// if (idx + 1 <= cnt) el *= (-1);
// })
// }
}, 0);
}
참조한 풀이
function solution(dartResult) {
let arr = [0,0,0];
let point = -1;
for(var i = 0 ; i < dartResult.length; i++) {
if(Number.isInteger(dartResult[i]*1)) {
point++;
if (dartResult[i] == '1' && dartResult[i+1] == '0') {
arr[point]+=10;
i++;
continue;
}
else arr[point]+=dartResult[i]*1;
}
else {
if (dartResult[i] == 'D') arr[point]**=2;
else if (dartResult[i] == 'T') arr[point]**=3;
else if (dartResult[i] == '*') {
arr[point]*=2;
arr[point-1]*=2;
}
else if (dartResult[i] == '#') arr[point]*=(-1);
}
}
return arr.reduce((a, b) => a+b);
}
반응형
'Problem Solving > Algorithm 문제 풀기' 카테고리의 다른 글
[#2][프로그래머스][입문] 두 수의 차 (0) | 2023.01.06 |
---|---|
[#1][프로그래머스][입문] 몫 구하기 (0) | 2023.01.05 |
[프로그래머스] 비밀지도 (0) | 2022.02.22 |
프로그래머스_programmers_문자열 내림차순으로 배치하기 (0) | 2022.01.09 |
프로그래머스_programmers_문자열 다루기 기본 (0) | 2022.01.09 |