분류 전체보기
[백준 2193] 이친수
문제 출처 https://www.acmicpc.net/problem/2193 2193번: 이친수 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않는다. 이친수에서는 1이 두 번 연속으로 나타나지 않는다. 즉, 11을 부분 문자열로 갖지 않는다. 예를 들면 1, 10, 100, 101, 1000, 1001 등이 이친수가 된다. 하지만 0010101이나 101101은 각각 1, 2번 규칙에 위배되 www.acmicpc.net 어떻게 풀어야할까 먼저 이친수의 특징을 살펴보자 1. 0으로 시작하지 않는다. 2. 1이 연속으로 들어가지 않는다. 특징이 어렵..
플랫 라이너 (2017)
죽음보다 더한 공포 공포는 어디서 오는 것일까? 죽음 이후에 오는 허무에 대한 거부 또는 두려움일까? 는 조금 생각이 다른 것 같다. 영화는 죽음을 아주 가까이 둔다. 의대생인 앨렌 페이지는 영화 초장부터 죽고(=임사체험) 싶어하는데, 그 이유는 -나중에 밝혀지지만- 죽음을 통해 죽어버린 동생과 만나기 위해서였다. 영화 초반, 죽음은 날아가버린 인연을 잡을 수 있는 동아줄이었다. 앨렌 페이지는 동생을 만났을 뿐만 아니라 다른 능력도 얻게 됐다. 죽음으로 인해 뇌가 활발히 활동해 자신이 가진 기억을 생생하게 기억할 수 있게 된 것이다. 10년 전에나 연주했던 피아노를 수준급으로 칠 수 있게 되었고, 한번 봤던 투약설명서는 한글자 한글자 생각이 났다. 다른 동료들은 그의 이런 능력이 탐났다. 일년에 한명씩 ..
영화감독 숌
https://www.acmicpc.net/problem/1436 #include #include #include #include using namespace std; // 종말의 수인지 판별해주는 함수 bool isEndWorld(int num) { int seq=0; string num_st = to_string(num); for (int i = 0; i < num_st.length(); i++) { if (num_st[i] == '6') seq++; else seq = 0; if (seq == 3) return true; } return false; } int main () { int N, answer; // N = 몇번째 종말의 수인지, answer = N번째 종말의 수 int count=0, i..
리모컨
https://www.acmicpc.net/problem/1107 #include #include #include using namespace std; vector isBroken(10, false); // 고장난 버튼을 알려주는 벡터 // 누를 수 있는 숫자인지 알려주는 함수 int canPush(int num) { int push = 0; while(true) { if (isBroken[num%10] == true) return 0; else { num /= 10; push++; } if (num == 0) return push; } } int main () { int answer=0; // 몇번 버튼을 눌렀는지 저장하는 변수 int N, M, temp; // N = 이동하려는 채널, M = 고장난 ..
덩치
https://www.acmicpc.net/problem/7568 #include #include #include using namespace std; int main () { vector kg, cm, rank; int N; cin >> N; // 초기화 kg.reserve(N); cm.reserve(N); rank.assign(N, 1); // 입력을 받는다. for (int i = 0; i > kg[i] >> cm[i]; } // 덩치의 순위를 구한다. // 키와 몸무게가 더 작으면 랭크를 1씩 더한다. // i -> 비교기준, j -> 비교 대상 for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) { // 자기자신과는 ..
분해합
https://www.acmicpc.net/problem/2231 2231번: 분해합 문제 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다. 자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그 www.acmicpc.net #include #include #include using namespace std; int main () { int N, sum=0, n..
카드의 합 구하기
https://www.acmicpc.net/problem/2798 #include #include #include using namespace std; int main () { vector deck; // 카드 덱을 저장할 벡터 int N, M, temp; // N = 카드의 개수, M = 카드의 합 int i, j, k; // 반복 인수 int sum=0, top=-1; // sum = 일시적인 카드의 합, top = 여태까지 최고의 합 // 입력을 받는다. cin >> N >> M; deck.reserve(N); for (i=0; i > temp; deck.push_back(temp); } // bruteforce search for (i=0; i
계단 오르기
1. 재귀형 완전 탐색 #include #include using namespace std; vector tri; int N; int step (int value, int row, int col) { // 자기가 있는 곳까지의 값의 합을 가지고 시작한다. // 기저 사례 // 여기가 끝일 경우 -> 현재까지의 값을 리턴. if (row == N-1) return value; // 재귀 사례 // 바로 밑으로 가거나 오른쪽 밑 중에서 큰 값을 리턴한다. return max(step(value+tri[row+1][col], row+1, col), step(value+tri[row+1][col+1], row+1, col+1)); } int main () { int hi; cin >> N; /..