일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- vscode
- LF
- git
- expected linebreaks to be 'lf' but found 'crlf' linebreak-style
- react
- 원시값
- git 명령어
- lazy-load
- 퀵정렬
- eslint-prettier
- k번째수
- 참조타입
- git 개행문자
- prettier
- git autocrlf
- 개행문자
- 가장큰수
- input type password
- REST API
- 응답코드
- CRA
- expected linebreaks to be 'crlf' but found 'lf' linebreak-style
- JadenCase
- HTTPS
- eslint
- input 안보임
- password 안보임
- IP주소
- CRLF
- 프로그래머스
Archives
- Today
- Total
우파루파의 개발 기록
[프로그래머스] 성격 유형 검사하기 본문
안녕하세요.
이번 문제는 프러그래머스 1단계 - 성격 유형 검사하기 입니다.
이 문제는 2022 카카오 테크 인턴쉽 문제라고 하는데, 최신 문제라서 그런지 아직은 Best practice가 존재하지 않는 것 같습니다.
저같은 경우 이번 문제는.. 문제를 이해하는 것 자체가 오래 걸렸습니다. 오히려 푸는 건 금방 풀었던 것 같은데요. 이 부분이 아쉽습니다.
일단 정답 초안입니다.
function solution(survey, choices) {
const data = [
["R", "T"],
["C", "F"],
["J", "M"],
["A", "N"]
];
const calc = {
"R": 0,
"T": 0,
"C": 0,
"F": 0,
"J": 0,
"M": 0,
"A": 0,
"N": 0
}
for (let i = 0; i < survey.length; i ++) {
const [before, after] = survey[i].split("");
if (choices[i] < 4) calc[before] += 4 - choices[i];
else if (choices[i] > 4) calc[after] += choices[i] - 4;
}
return data.map(([a, b]) => {
if (calc[a] === calc[b]) return a < b ? a : b;
else return calc[a] > calc[b] ? a : b;
}).join("");
}
상당히 길다는 느낌이 들고.. 아쉬운 부분이 한두개씩 보입니다. 그래서 이후 개선할 수 있는 포인트를 찾아서 나름 개선해 보았습니다.
최종 답안입니다.
function solution(survey, choices) {
const calc = {"R": 0,"T": 0,"C": 0,"F": 0,"J": 0,"M": 0,"A": 0,"N": 0};
for (let i = 0; i < survey.length; i ++) {
if (choices[i] < 4) calc[survey[i][0]] += Math.abs(4 - choices[i]);
else if (choices[i] > 4) calc[survey[i][1]] += Math.abs(4 - choices[i]);
}
function getType(a, b) {
if (calc[a] === calc[b]) return a < b ? a : b;
else return calc[a] > calc[b] ? a : b;
}
return getType("R", "T") + getType("C", "F") + getType("J", "M") + getType("A", "N")
}
calc 변수의 경우 Map과 Object의 사용을 고민했는데, 삭제가 이루어지지 않는 데이터일 뿐더러 적은 용량의 데이터이기에 일반 Object를 선택했습니다.
1단계이긴 하지만, 저에게 이번 문제는 상당히 까다로워서 즐거웠던 것 같습니다.
피드백은 언제나 환영이니 부탁드립니다.
감사합니다.
'development > 알고리즘' 카테고리의 다른 글
[프로그래머스] 숫자 문자열과 영단어 (1) | 2022.08.23 |
---|---|
[프로그래머스] 부족한 금액 계산하기 (0) | 2022.08.21 |
[프로그래머스] 시저 암호 (0) | 2022.08.21 |
[프로그래머스] 같은 숫자는 싫어 (0) | 2022.08.21 |
[프로그래머스] 없는 숫자 더하기 (0) | 2022.08.19 |