알고리즘 부셔버렷/ProblemSolving
[프로그래머스] 단체사진 찍기 (문제 설명, 해결 과정, 코드 전문, c++)
Unagi_zoso
2022. 6. 1. 02:39
문제 설명 |
본 문제는 프로그래머스의 단체사진 찍기 문제입니다.
해결 과정 |
data배열의 문자열에 인덱스로 접근하면 조건과 대상에 대해서 다룰 수 있습니다. 파싱한 듯한 결과가 됩니다.
next_permutation 함수를 통해 모든 순열에 접근하여 해당 조건에 하나라도 부적합할 시 그 횟수를 저장해
일어날 수 있는 총 순열의 갯수 40320 - 부적합 수 를 반환합니다.
코드 전문 |
#include <string>
#include <vector>
#include <algorithm>
#include <cstdlib>
using namespace std;
// 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
int solution(int n, vector<string> data) {
string ka_friends = "ACFJMNRT";
int false_cnt = 0;
do
{
for (auto c : data)
{
int friend1_idx = ka_friends.find(c[0]);
int friend2_idx = ka_friends.find(c[2]);
int gap_two_friends = abs(friend1_idx - friend2_idx)-1;
if (c[3] == '<')
{
if (gap_two_friends >= (c[4] - '0')) { false_cnt++; break; }
}
else if (c[3] == '=')
{
if (gap_two_friends != (c[4] - '0')) { false_cnt++; break; }
}
else if (c[3] == '>')
{
if (gap_two_friends <= (c[4] - '0')) { false_cnt++; break; }
}
}
} while (next_permutation(ka_friends.begin(), ka_friends.end()));
return 40320 - false_cnt;
}
느낀 점 (잡설 99% , 배운점 1%(많은 편)) |
더보기
vector에는 따로 find 함수가 없습니다. string이나 map에는 존재하는데 아쉽다. algorithm 라이브러리에도
find가 있긴 한데 적용해보니 에러만 왕창 나고 포기했다. abs는 cstdlib에 있는 함수이다.
긴 글 읽어주셔서 감사합니다.
부족한 점이 있다면 부디 알려주시면 감사하겠습니다.