새소식

코딩테스트/프로그래머스

[C++] 위장

  • -

[문제]

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

 

프로그래머스

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

programmers.co.kr


[문제 풀이]

옷의 경우를 파악하기가 힘들어서 헤맸었던 문제.

예전에 배웠던 수학을 이용해서 쉽게 풀 수가 있었다.

옷이 가지는 경우는 해당 옷의 개수 + 해당 옷을 안 입은 개수들이니

(상의의 개수 + 상의를 안 입은 개수(1) ) * (하의의 개수 + 하의를 안 입은 개수(1) ) .... 등을 하고 마지막에 모두 안 입은 개수(1) 을 빼주면 된다.

map을 써서 쉽게 풀 수가 있다.

map에서 해당 종류에 몇개의 옷이 있는지 key value 값으로 나타내주고 모든 종류를 + 1 해주면서 곱하고 마지막에 1을 빼주자.


[코드]

#include <string>
#include <vector>
#include <iostream>
#include <map>

using namespace std;

int solution(vector<vector<string>> clothes) {
    int answer = 0;
    
    map<string, int> apparel; //map을 사용해서 앞에 종류를 저장하고 뒤에 해당 종류의 갯수를 저장.
    
    for(int i = 0;i<clothes.size();i++){ //반복문 사용
        apparel[clothes[i][1]]++;
    }
    
    int count = 1;
    
    for(auto iter = apparel.begin();iter != apparel.end();iter++){ //모든 종류 반복
        //모든 경우는 옷의 개수 + 옷을 안입었을때를 더한 값을 곱한결과이다.
        //여기서 마지막에 모든 종류의 옷이 없을때의 경우인 1을 제거해주면 답이 나온다.
        count *= iter->second+1;
    }
    
    answer += count - 1;
    return answer;
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[C++] K번째수  (0) 2022.12.03
[C++] 베스트앨범  (2) 2022.12.03
[C++] 전화번호 목록  (0) 2022.12.03
[C++] 포켓몬  (0) 2022.12.03
[C++] 완주하지 못한 선수  (0) 2022.12.03
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.