-
문제
programmers.co.kr/learn/courses/30/lessons/42578
코딩테스트 연습 - 위장
programmers.co.kr
접근법
문제를 처음 봤을 때는 어떻게 풀지라는 막연함이 왔지만, 궁극적으로는 "경우의 수" 문제라는 것을 깨달을 수 있었다.
다만,
1) 옷을 전부 다 벗을 수는 없다.
2) 같은 종류의 아이템은 중복해서 장착이 안된다.
3) 1가지의 옷만 입어도 상관없다.
라는 점을 간과 하지 않고 문제를 푸는 것이 핵심이라고 생각이 든다.
[해시] 유형의 문제이기에, 결과적으로 문제를 푸는 사람에게 요구하는 것은 무엇일까? 생각해보면 위의 주의사항을 유념하고 아이템을 종류 별로 나누어 처리 할 수 있는지를 확인 하는 느낌이 강했다.
입력 단계에서 중복된 상품을 입력 할 수 없기에, 우리는 동일한지의 여부를 확인 할 필요가 없고, 결과적으로는 어떤 종류의 아이템인지 확인하여 계산을 해주면 되는데 3)번을 잊지말고
종류의 수 + 1 * 종류의 수 + 1 로 정답을 계산 해야하고, 옷을 전부 다 벗는 경우는 없기에 정답에서 "-1"을 해주면 된다.
코드
function solution(clothes) { let answer = 1; let obj={}; for(let i=0;i<clothes.length;i++){ obj[clothes[i][1]]=(obj[clothes[i][1]] || 1) + 1; } for(let key in obj){ answer *= obj[key]; } return answer-1; }
문제를 통해 배운 점
보통 알고리즘을 풀면, 문제의 유형이 뭔지 주어지다보니, 별다른 생각을 하지 않고 " 그냥 쓰면 되겠구나 " 와 같은 식으로 풀어 왔는데,
이번 문제를 풀면서는 처음으로 " 왜 해시를 써야하지? " , " 문제의 의도는 무엇일까? " 에 대한 고민들을 다양하게 할 수 있었다.
다른 문제를 품에 있어서, 알아야 하는 점은 시험장에서는 어떤 유형인지 친절하게 이야기 해주는 곳은 없기에, 목적이나 방향에 대한 고민을 바탕으로 문제를 시작 해야 한다는 것을 배울 수 있었다.
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스_스택] 다리를 지나는 트럭 ( by using JavaScript) (0) 2021.04.18 [프로그래머스_완전탐색] 소수찾기 ( by using JavaScript ) (0) 2021.04.15 [프로그래머스_구현] 모의고사 (0) 2021.04.15 [프로그래머스] 기능개발( 스택큐, by using javscript) (0) 2021.04.06 [프로그래머스 ] 프린터(큐, by using javascript ) (0) 2021.04.06 댓글