[프로그래머스 level2] 단체사진 찍기 (C++)
조합을 통해 모든 경우의 수를 찾고 조건에 맞는지 찾는 문제이다. (프로그래머스 level2)
문제는 다음과 같다.
단체사진 찍기
처음에 봤을땐 확률과 통계 풀듯이 뭐 N과 F사이에 0을 넣어줘야되나? 뭐 이런 생각이 들었다.
하지만 이건 사람이나 할수있는 일이고
컴퓨터로는 모든 경우의 수에 대해서 조건만 맞는지 확인해주면 된다.
구현
- 입력받은 data를 따로 저장
- 조합으로 얻은 string 과 data의 조건이 일치한지 확인
C++ 문법
- 모든 조건을 찾는건 next_permutation() 을 사용하였다.
next_permutation는 string에서도 잘 적용됨을 확인할 수 있다. - string으로 입력될때 숫자도 문자임을 주의하자.
0의 아스키코드는 48이다.
int diff = nowStr[4]-48;
코드
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
bool isRight(int diff, int real, char sign)
{
if(sign == '=') return diff == real;
else if(sign == '<') return real < diff;
else if(sign == '>') return real > diff;
}
int solution(int n, vector<string> data) {
int answer = 0;
string friends = "ACFJMNRT";
do{
bool flag = true;
for(int i=0; i<n; i++)
{
string nowStr = data[i];
char f = nowStr[0];
char s = nowStr[2];
char sign = nowStr[3];
int diff = nowStr[4]-48;
int fIdx = -1, sIdx = -1;
for(int j=0; j<8; j++)
{
if(friends[j] == f) fIdx = j;
else if(friends[j] == s) sIdx = j;
}
int tmpDiff = abs(fIdx-sIdx)-1;
if(!isRight(diff, tmpDiff, sign)) {
flag=false;
break;
}
}
if(flag) answer++;
}while(next_permutation(friends.begin(), friends.end()));
return answer;
}
Author And Source
이 문제에 관하여([프로그래머스 level2] 단체사진 찍기 (C++)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mar_f/프로그래머스-단체사진찍기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)