본문 바로가기

전체 글

(56)
[코드업] 3210 - 기억력 테스트 5 주현이의 실력이 늘자 주현이 엄마는 더욱 사악해져 갔다. 이번에도 n개의 숫자를 불러주고, m개의 질문을 한다. 이번에 질문은 두 수 a, b를 이야기하는데, a번째에서 b번째 불렀던 수들 중 가장 큰 수를 묻는다. 예를 들어 2 100 24 99 25 24을 불러주고 3 6이라고 질문하면 3번째와 6번째 사이의 수 중 가장 큰 수인 99를 말해야 한다. 이번에는 없어서 못 파는 "파워레인저 다이노포스 티라노킹"이 걸려있다. 입력 첫 줄에 불러줄 숫자의 개수 n이 입력된다. ( 1 > a >> b; for(int j = 0; j = a && query[j].second
[코드업] 3736 - LIS (Large) LIS(Longest Increasing subsequence)란 최장 증가 부분수열을 말한다. 프로그래밍 문제를 풀 다 보면 이것을 응용하는 문제가 많이 출제되고 있고, 동적계획법의 대표적인 사용 예 중 하나이다. 다음과 같은 원소의 개수가 8개(N)인 수열이 있을 때, 1 3 2 9 7 8 5 10 LIS = 1 2 7 8 10 으로 그 길이는 5이다. 이번에는 데이터의 크기가 크므로 O(n^2)알고리즘으로는 해결할 수 없을 것이다. 입력 첫째줄에 수열의 원소개수 N이 입력된다.( 1 N; vec.push_back(-987654321); int ret = 0; int num; for(int i = 0; i > num; if(vec.back() < num){ vec.push..
[코드업] 3710 - 369 게임 3 (Large Test Case) 시작 수(a)와 마지막 수(b)가 입력되면 그 범위의 369게임에서 박수를 쳐야 될 횟수의 합을 출력하시오. ※ 369게임의 룰은 다음과 같다. 1. 숫자에 3이나 6이나 9가 들어가면 369 수에 해당된다. 2. 369 수에 해당될 경우 3이나 6이나 9가 들어간 개수만큼 박수를 친다. (예: 36은 박수를 두번 친다.) 3. 그 외의 숫자들은 박수를 치지 않는다. 아주 큰 범위의 테스트 데이터가 입력된다. 입력 시작 수 a와 마지막 수 b가 공백을 기준으로 입력된다. (1 > b; for(int i = 1; i < 10; i++){ if(i % 3 == 0) vec[i] = 1; else vec[i] = 0; } int result = 0; for(int i = 1; i = 10){ vec[i] = ..
[코드업] 3020 - 기억력 테스트 4 테스트 3을 무사히 마친 주현이는 테스트 4에 도전하게 되었다. 주현이 엄마는 이번에 무작위로 숫자 N개를 불러준다음, M개의 질문을 하기로 했다. 질문으로 그 숫자가 있었으면 그 숫자를 몇 번째로 불렀는지 출력하고, 없었다면 -1을 출력한다. 이 테스트에는 주현이가 좋아하는 '또봇 X, Y, Z'가 걸려있다. 주현이를 도와줄수 있는 프로그램을 만드시오. 입력 첫째줄에 N이 입력된다. (1 N; vec.resize(N); int num; for(int i = 0; i > num; vec[i] = { num, i + 1 }; } sort(vec.begin(), vec.end()); int M; cin >> M; int query; while(M--){ cin >> query; ..
[코드업] 3733 - 우박수 길이 (3n+1) (large) 콜라츠의 추측, 3n+1 문제, 우박수 문제라고 불리는 이 문제는 다음과 같다. 1, 어떤 자연수 n이 입력되면, 2. n이 홀수이면 3n+1을 하고, 3. n이 짝수이면 n/2를 한다. 4. 이 n이 1이 될때까지 2~3과정을 반복한다. 예를 들어 5는 5 → 16 → 8 → 4 → 2 → 1 이 된다. 여기서 5가 1이되기 위해 6개의 숫자를 나열하게 된다. 이것을 길이라고 하면 5의 길이는 6이된다. 시작수와 마지막 수가 입력되면 그 두 사이게 길이가 가장긴 우박수와 그 길이를 출력하시오. 입력 두 자연수 a, b가 공백으로 분리되어 입력된다. ( 1 > a >> b; int maxValue = solve(a); int retIdx = a; for(int i = a + 1; i
[코드업] 3007 - 기억력 테스트 7 주현이 엄마는 '기억력 테스트 6'이 너무 가혹해서인지 이번에는 좀 쉬운 테스트를 하기로 했다. 이번에도 n개의 숫자를 불러 주고, m개의 질문을 한다. 질문은 두 수 a, b를 이야기 하는데, a번째와 b번째 사이에 불렀던 수들의 합을 묻는다. 예를 들어, 3 5 2 1 4 3 의 숫자를 불러주고, 2, 4라고 질문하면 2번째에서 4번째 불렀던 숫자들의 합인 8을 대답해야한다. 이번 테스트를 무사히 통과하면 '닌자 고'의 4종 캐릭터 장난감을 받을 수 있다. 입력 첫째 줄에 n과 m이 입력된다. ( 1 a >> b; cout
[코드업] 2033 - 사다리 게임 주영이는 사다리 게임을 좋아한다. 그는 긴 사다리도 쉽게 결과를 알 수 있게 사다리 타기 게임의 결과를 구하는 프로그램을 작성하려고 한다. 주영이를 도와주는 프로그램을 만들자. 프로그램은 다음과 같이 진행된다. 1. 세로 선의 개수 k와 한 선과 다른 선을 연결하는 선의 개수 n이 입력된다. (단, 2 n; for (int i = 0; i > l[i] >> r[i]; int p; cin >> p; for (int i = 0; i < n; i++) { if (l[i] == p) p = r[i]; else if (r[i] == p) p = l[i]; } cout
[백준] 11403 - 경로 찾기 문제 가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정점의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄부터 N개 줄에는 그래프의 인접 행렬이 주어진다. i번째 줄의 j번째 숫자가 1인 경우에는 i에서 j로 가는 간선이 존재한다는 뜻이고, 0인 경우는 없다는 뜻이다. i번째 줄의 i번째 숫자는 항상 0이다. 출력 총 N개의 줄에 걸쳐서 문제의 정답을 인접행렬 형식으로 출력한다. 정점 i에서 j로 가는 경로가 있으면 i번째 줄의 j번째 숫자를 1로, 없으면 0으로 출력해야 한다.' 더보기 예제 입력 1 3 0 1 0 0 0 1 1 0 0 예제 출력 1 1 1 1 1 1 1 1 1 ..