알고리즘

99클럽 코테 스터디 2일차 TIL 의상

ernest45 2024. 5. 21. 22:51

https://school.programmers.co.kr/learn/courses/30/lessons/42578

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

겹치지 않는 것들을 고를 수 있는 조합 문제이다.

 

문제를 세분화하자면

 

가진 옷이 있고 같은 부위라면 최대 1개만, 하나라도 다르면 다른 옷이고, 최소 하나 입음

해쉬를 사용해서 풀자 !
중복은 안됨 순서가 중요하지 않음
 ,기준으로 나눠서 저장 ? 종류가 있다면 일단 첨 넣을 때 1이고 getOrDefault로 계속 숫자 추가 ?
 순열 조합 이용해서 마지막에 다 선택된 경우까지 계산되니까 -1 해주면 되겠다

 

사실 예전에 위장이라는 문제를 풀어봐서 hash로 접근하는 방법은 기억이 났다.

 

1. map에 저장

 

[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]

 

예제로 이렇게 주어지면 map에는

종류 별로 넣어준다.

 즉 headgear=2,  eyewear=1

이런 식으로 맵에 key,value를 넣는다.

 

 

 

2. 실패요인

 

 

 

이렇게 넣게되면 2개 1개만 담기게 되는데 이럴 경우 안쓸 경우를 생각하지 못하게 된다.

사실 상 headgear=3,  eyewear=2 을 넣어야 한다.

예시 headgear(노란모자,초록터번, 아무것도 안 쓴 상태)

 

 

(Map에 계속 1씩 추가하게 못하려나.. 이 생각하느라 고민좀 했다)

 

 

 

 

 

3. 정답 참고

잘 안풀려서 결국 다시 찾아보니

넣을 땐 똑같이 넣고 계산 방식에서 +1로 아무 것도 안한 경우를 더해 곱해주게 되고

그럴 경우 마지막에 answer -1을 해주면 정답이 된다.

(-1은 아무 것도 안 쓰거나 입은 상태끼리 다 모여서 바바리맨이 되는 경우를 빼줘야 하기 때문!)

 

 

 

 

 

4. 최종 결과  & 느낀 점

 

 

 

예전에 풀 땐 잘 풀렸는데..

다시 예전에 푼 문제들도 다시 보자 ! 

 

 

 

(사실 comi 메서드도 다시 꺼내옴 ㅠㅠ..)

다시 가끔씩 써야게따

나중에 이 메서드로 다시 풀어봐야지..