•
회의 날짜: 2022/12/06
•
회의 장소: discord 라운지
•
참석자: 김솔배, 구연지, 안지영
[회고 사진]
[문제]
[이번 스터디 공부한 내용]
•
•
Hash Table을 이용하여 푸는 방식으로 접근하였습니다.
1. 종류별로 몇개의 의상이 있는지를 구하고 (HashTable 사용)
2. 각 종류마다 아무것도 입지 않을 경우를 더해서(HashTable에 put할때 적용)
3. 전부 곱해서 (Iterator 사용)
4. 아무것도 입지 않는 조건을 빼는 로직으로 정답을 구했습니다.
해결코드
public class Solution {
public static int solution(String[][] clothes) {
Hashtable<String, Integer> hashtable = new Hashtable<>();
for (int i = 0; i < clothes.length; i++) {
//각 카테고리의 경우의 수를 구한다.
//아무것도 선택하지 않은 경우를 포함하기 때문에 defaultValue를 1로 함.
hashtable.put(clothes[i][1], hashtable.getOrDefault(clothes[i][1],1) + 1);
}
// System.out.println(hashtable);
Iterator<Integer> it = hashtable.values().iterator();
int answer = 1;
while (it.hasNext()) {
answer *= it.next().intValue(); //경우의 수가 정해져있는 각 카테고리를 곱하면 모든 경우의 수를 찾을 수있다.
}
return answer -1; //아무것도 입지 않은 경우 -1 뺴기
}
public static void main(String[] args) {
String[][] clothes = new String[][]{{"yellow_hat", "headgear"}, {"blue_sunglasses", "eyewear"}, {"green_turban", "headgear"}};
System.out.println(solution(clothes));
}
}
Java
복사
•
문제의 조건
(1) 각각 카테고리 별 하나의 아이템을 이용할 수 있다
(2) 의상을 착용하지 않는 경우는 없다.
만약 아래와 같은 의상들이 주어진다면
얼굴 | 동그란 안경, 검정 선글라스 |
상의 | 파란색 티셔츠 |
하의 | 청바지 |
겉옷 | 긴 코트 |
•
얼굴 장식은 3가지 경우: X, 동그란 안경, 검정 선글라스
•
상의는 2가지 경우: X, 파란 티셔츠
•
하의는 2가지 경우: X, 청바지
•
겉옷은 2가지 경우: X, 긴코트
→ 3*2*2*2가지 경우가 나오는데 의상을 착용하지 않는 경우는 없으므로 3*2*2*2-1가지
→ 따라서 각 카테고리 별로 아이템이 몇 개인지 확인한 후 (a+1)(b+1)(c+1)…(z+1) -1 을 해주면 된다.
def solution(clothes):
# 반드시 1개는 입어야 함
# 한 카테고리에서 하나씩만
# 2,1이면 3*2-1(다 안입는 경우)
answer = 1
category_dictionary = {} # key가 카테고리, value가 아이템 개수
for i in range(len(clothes)):
# key가 없으면 딕셔너리에 키워드를 추가하고
# 있으면 아이템 개수 올려주기
if (clothes[i][1] in category_dictionary.keys()):
category_dictionary[clothes[i][1]] += 1
else:
category_dictionary[clothes[i][1]] = 1
values = list(category_dictionary.values())
for i in range(len(values)):
answer = answer * (values[i]+1)
answer -= 1
return answer
Python
복사
•
옷의 종류별로 최대 한벌 씩 선택할 수 있고, 어떤 옷이던 최소 한개는 입어야 한다.
def solution(clothes):
combi = dict()
for cloth in clothes:
combi.setdefault(cloth[1],0)
combi[cloth[1]] += 1
values = list(combi.values())
multiply = 1
for value in values:
multiply *= (value+1)
return multiply -1
clothes = [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]
print(solution(clothes))
Python
복사
dict.setdefault(key, defaultvalue) : 해당 key가 딕셔너리에 존재하면 value 값을 반환하고, 존재하지 않는다면 key를 등록하고 defaultvalue로 초기화 시킨다.
[어려웠던 부분]
•
모든 조합의 수를 구하는 로직을 떠올리는데 오래 걸렸습니다.
HTML
복사
•
이번 문제는 비교적 수월하게 풀 수 있었던 것 같습니다.
Plain Text
복사
•
딕셔너리라는 자료구조를 사용하는게 익숙하지 않아 막상 직접 구현할 때 구글링을 좀 해야했습니다.
Plain Text
복사
[금주의 꿀팁 & 인사이트!]
•
종류별로 Cnt를 하는 것은 HashTable 또는 HashMap을 이용하는것이 간편하다.
HTML
복사
•
문제를 풀기 전 어떤 조건이 필요한 지를 파악하는 단계가 중요하다!
Plain Text
복사
•
딕셔너리 디폴트 값을 설정하는 함수가 있다. 그리고 좀 더 찾아보니 collections에
defaultdict이라는 것도 있는 것 같다!
Plain Text
복사
[금주의 느낀 점]
•
하루에 2시간씩은 계속 알고리즘 공부를 하자
HTML
복사
•
이런 문제들이 코딩테스트에서는 나오지는 않겠지...?
다음 주도 더 열심히 공부해야겠다 :)
Plain Text
복사
•
파이썬 자료구조도 다시 공부해야겠다..
Plain Text
복사