Coding/PS

    [백준 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이 연속으로 들어가지 않는다. 특징이 어렵..

    영화감독 숌

    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; /..

    그대로 출력하기

    https://www.acmicpc.net/problem/11718 문제 내용 입력 받은 대로 출력하는 프로그램을 작성하시오. 입력 최대 100줄로 이뤄져있는 문자열이 제시된다. 각 줄은 100글자를 넘지 않는다. 출력 입력받은 그대로 출력한다. 풀이 cin으로 입력값을 받고 입력값을 받을 때마다 eof를 검사한다. eof는 cin 버퍼에 내장되어 있다. 디버깅을 위해 EOF를 입력할 때는 window는 ctrl+Z, unix는 ctrl+D이다. 코드 #include #include using namespace std; int main(int argc, char* argv[]) { string buffer; while(!cin.eof()) { getline(cin, buffer); cout