반응형
문제출처
https://programmers.co.kr/learn/courses/30/lessons/62049
코딩테스트 연습 - 종이접기
직사각형 종이를 n번 접으려고 합니다. 이때, 항상 오른쪽 절반을 왼쪽으로 접어 나갑니다. 다음은 n = 2인 경우의 예시입니다. 먼저 오른쪽 절반을 왼쪽으로 접습니다. 다시 오른쪽 절반을 왼쪽��
programmers.co.kr
문제풀이
규칙을 찾아내면 쉬운 문제. 규칙을 처음에 찾으려고 직접 종이를 접어가면서 풀이했다. 직접 종이를 접어가며 나오는 출력값을 적어가는 도중 0을 대칭으로 어떤 연산이 일어나는 걸 알아차렸다.
즉 n이 3인경우 0 0 1 -> 0 0 1 0 0 1 1 으로 바뀌는데 0 0 1 뒤에 0을 붙이고 n이 2일때의 값을 뒤집어서 1이면 0, 0이면 1을 넣어주면 된다.
소스코드
sw93/algorithm
problem solve. Contribute to sw93/algorithm development by creating an account on GitHub.
github.com
#include <string> #include <vector> using namespace std; /* * 규칙 * n = 1 -> 0 * n = 2 -> 0 0 1 * n = 3 -> 0 0 1 0 0 1 1 * n = 4 -> 0 0 1 0 0 1 1 0 0 0 1 1 0 1 1 * n = 2 -> 3이 될때 0 0 1과 0 1 1 을 보면 기존 0은 1로 1은 0으로 바뀌고 가운데 0이 끼는 것을 알 수 있음 * n = 3 -> 4가 될때도 기존 3인 값에 0이 추가 되고 역순으로 0은 1로 1은 0으로 바뀜 */ vector<int> solution(int n) { vector<int> answer; answer.push_back(0); if (n == 1) return answer; for (int i=2; i<=n; i++) { vector<int> temp = answer; answer.push_back(0); for (int j=temp.size()-1; j>=0; j--) { if (temp[j] == 0) answer.push_back(1); else if (temp[j] == 1) answer.push_back(0); } } return answer; }
반응형
'Algorithm' 카테고리의 다른 글
[프로그래머스 12977] - 소수 만들기 (0) | 2020.05.26 |
---|---|
[프로그래머스 43164] - 여행경로 (0) | 2020.05.25 |
[프로그래머스 12987] - 숫자 게임 (0) | 2020.05.22 |
[프로그래머스 60059] - 카카오 자물쇠와 열쇠 (0) | 2020.05.20 |
[프로그래머스 60058] - 카카오 기출 괄호 변환 (0) | 2020.05.20 |