일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 프로그래머스
- 백준
- Docker
- CircuitBreaker
- 우아한세미나
- 세션
- 서블릿
- Spring Batch
- Level2
- 우아한테크코스
- 미션
- 스프링 부트
- JUnit5
- MSA
- 트랜잭션
- 우테코
- 레벨2
- 자바
- HTTP
- REDIS
- AWS
- 프리코스
- Paging
- JPA
- AOP
- 의존성
- 스프링부트
- 코드리뷰
- yml
- mock
Archives
- Today
- Total
늘
[프로그래머스] C/C++ [2017 카카오코드 본선] 단체사진찍기 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/1835?language=cpp
코딩테스트 연습 - 단체사진 찍기
단체사진 찍기 가을을 맞아 카카오프렌즈는 단체로 소풍을 떠났다. 즐거운 시간을 보내고 마지막에 단체사진을 찍기 위해 카메라 앞에 일렬로 나란히 섰다. 그런데 각자가 원하는 배치가 모두
programmers.co.kr
풀이
처음에는 수학문제인가 싶어서 공식을 찾으려 해봤지만 잘 찾기 어려웠다. 그래서 완탐을 해야하나 싶어서 시간복잡도를 계산해보니 8개 모두를 순열을 돌리므로 8! = 40320 *100(조건) = 4032000 약 400만밖에 안되므로 여유로웠다!😳
그래서 완탐을 돌리고 조건에 맞는것만 찾아서 카운트하는 방식으로 풀었다.
소스코드
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int visited[8];
string line;
string people;
int answer;
int cnt;
bool isOk(vector<string> data){
for(int i=0; i<data.size(); i++){
char left = data[i][0];
char right = data[i][2];
int dist = data[i][4] - '0';
dist++;
int left_index, right_index;
for(int i=0; i<line.size(); i++){
if(line[i] == left){
left_index = i;
}
if(line[i] == right){
right_index = i;
}
}
if(data[i][3] == '='){
if(abs(left_index-right_index) != dist){
return false;
}
continue;
}
else if(data[i][3] == '>'){
if(abs(left_index-right_index) <= dist){
return false;
}
continue;
}
else{
if(abs(left_index-right_index) >= dist){
return false;
}
continue;
}
}
return true;
}
void makeCase(int cnt, vector<string> data){
if(cnt == 8){
if(isOk(data)){
answer++;
}
return;
}
for(int i=0;i<8;i++){
if(!visited[i]){
line+=people[i];
visited[i] = 1;
makeCase(cnt+1, data);
line.pop_back();
visited[i]= 0;
}
}
}
int solution(int n, vector<string> data) {
answer = 0;
people = "ACFJMNRT";
makeCase(0, data);
return answer;
}
아 그리고 순열을 만들때 vector를 이용해서 만들면 시간초과가 걸린다. string을 이용하자!
(400만이라 여유로울줄알고 편한 vector로 했는데 시간초과가 나왔다.. push_back이 시간을 많이 잡아먹는 것 같다..!)😒
728x90
'알고리즘_프로그래머스 > KAKAO' 카테고리의 다른 글
[프로그래머스] C/C++ [2020 KAKAO BLIND RECRUITMENT] 문자열 압축 (0) | 2021.10.26 |
---|---|
c/c++ 2018 카카오 블라인드 [3차] n진수 게임 (0) | 2021.08.24 |
C/C++ 2018 KAKAO BLIND RECRUITMENT [3차] 파일명 정렬 (0) | 2021.08.06 |
2018 KAKAO BLIND RECRUITMENT [추석트래픽] (0) | 2021.07.21 |
2019 KAKAO BLIND RECRUITMENT_실패율 (3) | 2021.03.18 |
Comments