본문 바로가기

알고리즘

(54)
[코드업] 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 ..
[백준] 2167 - 2차원 배열의 합 문제 2차원 배열이 주어졌을 때 (i, j) 위치부터 (x, y) 위치까지에 저장되어 있는 수들의 합을 구하는 프로그램을 작성하시오. 배열의 (i, j) 위치는 i행 j열을 나타낸다. 입력 첫째 줄에 배열의 크기 N, M(1 ≤ N, M ≤ 300)이 주어진다. 다음 N개의 줄에는 M개의 정수로 배열이 주어진다. 배열에 포함되어 있는 수는 절댓값이 10,000보다 작거나 같은 정수이다. 그 다음 줄에는 합을 구할 부분의 개수 K(1 ≤ K ≤ 10,000)가 주어진다. 다음 K개의 줄에는 네 개의 정수로 i, j, x, y가 주어진다(i ≤ x, j ≤ y). 출력 K개의 줄에 순서대로 배열의 합을 출력한다. 배열의 합은 32bit-int 범위를 초과하지 않는다. 더보기 예제 입력 1 2 3 1 2 4 ..
[코드업] 2634 - 거스름돈 II 여러분은 실력을 인정받아 전 세계적으로 사용할 수 있는 자동판매기용 프로그램의 개발을 의뢰받았다. 이번에도 역시 자동판매기에서 이용자에게 거스름돈을 남겨줄 때, 거스름돈에 사용될 동전의 수를 가정 적게하는 것이다. 입력으로 거슬러 줘야할 돈의 액수와 그 나라에서 이용하는 동전의 가지 수 그리고 동전의 종류가 들어온다. 여러분은 그 돈의 액수를 거슬러 주는 여러가지 방법들 중 가장 적은 동전은 몇개인지 구하는 프로그램을 작성해야 된다. 입력 첫 번째 줄에는 거슬러 줘야할 돈의 액수가 입력된다. (이 값은 10,000원 이하이다.) 다음 줄에는 그 나라에서 사용되는 동전의 종류의 수가 입력된다. (단 동전의 수는 10이하이다.) 마지막 줄에는 동전의 수 만큼의 동전 액수가 오름 차순으로 입력된다. (동전의 ..