https://programmers.co.kr/learn/courses/30/lessons/1835
나의 풀이
#include <string>
#include <vector>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
bool check(int r_diff, int w_diff, char type) {
if (type == '=') {
return r_diff == w_diff;
}
else if (type == '<') {
return r_diff < w_diff;
}
else {
return r_diff > w_diff;
}
}
// 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
int solution(int n, vector<string> data) {
int answer = 0;
string names = "ACFJMNRT";
do {
bool flag = true;
for (string str : data) {
int man1 = names.find(str[0]);
int man2 = names.find(str[2]);
char type = str[3];
int diff = str[4] - '0';
int r_diff = man1 - man2;
if (check(abs(r_diff) - 1, diff, type)) {
continue;
}
flag = false;
break;
}
if (flag) {
answer++;
}
} while (next_permutation(names.begin(), names.end()));
return answer;
}
처음 풀어보는 순열문제다
다른 사람의 풀이를 보다가 algorithm 라이브러리에 있는 next_permutation이라는 함수를 알게되었다.
순열을 순서대로 만들어주는 함수이다.
이와 함께 절댓값을 구하는 abs 함수도 알게되었다.
모든 순열을 만들고 data 조건에 들어맞는 문자열을 answer에 더하였다.
'전공공부 > 코딩테스트' 카테고리의 다른 글
(c++) 프로그래머스 "124 나라의 숫자" (0) | 2022.01.12 |
---|---|
(c++) 프로그래머스 멀쩡한 사각형 (0) | 2022.01.12 |
(c++) 프로그래머스 "카카오 프렌즈 컬러링북" (0) | 2022.01.11 |
( c++) 프로그래머스 크레인 인형뽑기 게임 (0) | 2022.01.11 |
(c++) 프로그래머스 키패드 누르기 (0) | 2022.01.06 |