- 문제 풀이
"해시"를 사용하는 문제였다.
주어진 string 배열을 인덱스 1부분은 "키", 인덱스 0부분은 "값"으로 정해 해시로 표현하면 간단하게 문제를 해결할 수 있었다.
(특히 이렇게 해시로 표현하면 string으로 표현된 값을 int형으로 바꿔줄 수 있다는 것에 유리하다.)
1. 인덱스 1을 "키"로 설정해 해시테이블을 만들고,
2. for문을 통해 경우의 수를 계산하면 되는 문제이다.
- 코드
→ 처음 해시테이블에 값을 저장하는 코드의 for문을 쓸 때 cloth의 변수를 string으로 지정했고, 오류가 났다.
이렇게 자료형으로 오류가 나면 auto로 변수를 지정해주는 것이 좋다.
→ 해시테이블에 값을 저장할 때 vector의 인덱스[1]의 값을 "키"로 사용해 해시를 저장해야해서
temp[cloth[1]]++ 이라고 써주는 것이 중요했다.
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
int solution(vector<vector<string>> clothes) {
int answer = 1;
unordered_map<string, int> temp;
//해시테이블에 값 저장
for (auto cloth : clothes) {
temp[cloth[1]]++;
}
//해시테이블 순회하며 answer값 계산하기 (순회 시 iterator형태로 사용해도 됨)
//각 키에 해당하는 값에 안 입는 경우까지 +1 한 후 곱해 모든 경우의 수를 계산
for(auto pair : temp) {
answer *= pair.second+1;
}
// 계산한 경우의 수 중 모두 안 입는 경우 1가지는 빼주기
answer -= 1;
return answer;
}
아래 코드는 위에서 말했던 for문을 pair가 아닌 iterator을 사용해 구현한 방법이다.
이 역시 코드는 잘 돌아간다.
(참고: https://rooted.tistory.com/14)
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
int solution(vector<vector<string>> clothes) {
int answer = 1;
unordered_map<string, int> temp;
//해시테이블에 값 저장
for (auto cloth : clothes) {
temp[cloth[1]]++;
}
//해시테이블 순회하며 answer값 계산하기 (순회 시 iterator형태로 사용해도 됨)
//각 키에 해당하는 값에 안 입는 경우까지 +1 한 후 곱해 모든 경우의 수를 계산
for(auto iterator=temp.begin(); iterator!=temp.end(); iterator++) {
answer *= iterator->second+1;
}
// 계산한 경우의 수 중 모두 안 입는 경우 1가지는 빼주기
answer -= 1;
return answer;
}
'프로그래머스' 카테고리의 다른 글
| K번째수 - 프로그래머스, c++ (0) | 2023.01.18 |
|---|---|
| 기능개발 - 프로그래머스, c++ (0) | 2023.01.18 |
| 전화번호 목록 - 프로그래머스, c++ (0) | 2023.01.12 |
| 폰켓몬 - 프로그래머스, c++ (0) | 2023.01.12 |
| 완주하지 못한 선수 - 프로그래머스, C++ (1) | 2023.01.11 |