[프로그래머스] 단체사진 찍기

김개발·2021년 8월 12일
0

프로그래머스

목록 보기
17/42

문제 푼 날짜 : 2021-08-11

문제

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/1835

접근 및 풀이

주어진 배열 {A, C, F, J, M, N, R, T} (각각 어피치, 콘, 프로도, 제이지, 무지, 네오, 라이언, 튜브)을 이용하여 순열을 만들어 주고, 그 순열이 조건을 모두 만족하는지 체크해주면 쉽게 풀 수 있는 문제였다.
조건은 두 친구간의 거리에 관한 것이기 때문에, 각 순열에서 조건에 해당하는 친구들의 거리를 구하여 그 사이에 있을 수 있는 인원을 체크해주었다.
순열을 구현하는 방법은 여러가지가 있지만, C++의 next_permutation을 이용하여 구현해주었다.

코드

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

// 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
int solution(int n, vector<string> data) {
    vector<char> Friend{ 'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T' };
    int answer = 0;
    
    do {
        bool flag = true;
        for (string str : data) {
            char from = str[0], to = str[2];
            char op = str[3];
            int num = str[4] - '0';
            
            auto pos1 = find(Friend.begin(), Friend.end(), from);
            auto pos2 = find(Friend.begin(), Friend.end(), to);
            int diff;
            if (pos1 < pos2) {
                diff = pos2 - pos1 - 1;
            } else {
                diff = pos1 - pos2 - 1;
            }
            
            if (op == '=') {
                if (diff == num) {
                    continue;
                } else {
                    flag = false;
                    break;
                }
            } else if (op == '<') {
                if (diff < num) {
                    continue;
                } else {
                    flag = false;
                    break;
                }
            } else if (op == '>') {
                if (diff > num) {
                    continue;
                } else {
                    flag = false;
                    break;
                }
            }
        }
        if (flag == true) {
            answer++;
        }
    } while (next_permutation(Friend.begin(), Friend.end()));
    
    return answer;
}

결과

피드백

Level2 문제는 확실히 난이도는 쉽지만, 구현 능력을 기를 수 있는 좋은 문제들인 것 같다.
물론 내 코드가 깔끔하진 않지만,,, 생각을 최대한 코드화하는데 연습하기 좋은 것 같다.
좀 더 코드를 간소화하고, 알고리즘을 다듬어 코딩하는 연습을 해야될 것 같다.

profile
개발을 잘하고 싶은 사람

0개의 댓글