#문제 3052번: 나머지 https://www.acmicpc.net/problem/3052 3052번: 나머지 각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다. www.acmicpc.net #접근방법 수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한 다음 서로 다른 값이 몇 개 있는지 출력해야한다. 42칸의 배열을 만든 후, 42로 나눈 나머지 값의 배열인덱스에 기록을 하고 값이 들어있는 배열칸이 몇 개 있는지 출력하면 풀 수 있다. #풀이 #include int arr[42]; int main(){ int x; int ans = 0; for(int i=0;i
#문제 10998번: A x B https://www.acmicpc.net/problem/10998 10998번: A×B 두 정수 A와 B를 입력받은 다음, A×B를 출력하는 프로그램을 작성하시오. www.acmicpc.net #접근방법 A,B 정수값을 입력받은 후 곱셈한 값을 출력하면 된다. #풀이 #include int main(){ int a,b; scanf("%d %d",&a,&b); printf("%d",a*b); return 0; } 정수 a,b를 입력받고 a*b를 출력하면 정답이다. #성능 #정리 정말 간단한 출력문제여서 설명할게 없다.
#문제 1991번: 트리 순회 https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net #접근방법 먼저 입력값으로 트리를 만들고 재귀함수로 전위, 중위, 후위 순회한 결과를 출력하면 된다. #풀이 #include int arr[26][2]; void pre(int x){ if(x
#문제 1932번: 정수 삼각형 https://www.acmicpc.net/problem/1932 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net #접근방법 삼각형의 제일 밑층에서 위로 올라가면서 둘 중에 큰 값을 누적시키는 것을 반복하면 맨 위에 있는 곳이 정답이 된다. #풀이 #include #include using namespace std; int arr[505][505]; int main(){ int n; scanf("%d",&n); for(int i=0;i
#문제 1629번: 곱셈 https://www.acmicpc.net/problem/1629 1629번: 곱셈 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. www.acmicpc.net #접근방법 일반적으로 반복문을 돌면서 곱셈과 나머지연산을 하면 약 21억번의 반복을 하므로 시간초과가 걸린다. 따라서 O(n)번이 아닌 O(log n)번의 시간복잡도로 풀어야 된다. #풀이 #include int A,B,C; long long int f(long long int y){ if(y==1) return A%C; long long int k = f(y/2)%C; if(y%2==0) return k*k%C; else return ..
#문제 1149번: RGB거리 https://www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net #접근방법 거리에 있는 N개의 집들을 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 인접한 집이 서로 다른 색으로 칠하도록 하며 모든 집을 칠하는 비용의 최솟값을 구해야 한다. 이전 배열의 값을 계속 사용하는 다이나믹 프로그래밍 기법을 사용하여 최솟값을 누적시키면서 풀면 된다...
#문제 15666번: N과 M (12) https://www.acmicpc.net/problem/15666 15666번: N과 M (12) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net #접근방법 N개의 자연수 중에서 M개를 고른 수열 같은 수를 여러 번 골라도 된다. 고른 수열은 비내림차순이어야 한다. 모든 경우의 수를 구하는 백트래킹 기법을 사용하면서 적절한 조건문을 추가하면 풀 수 있다. #풀이 #include #include using namespace std; int n,m; int arr[10]; int num[10]; voi..
#문제 15663번: N과 M (9) https://www.acmicpc.net/problem/15663 15663번: N과 M (9) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net #접근방법 N개의 자연수 중에서 M개를 고른 수열을 출력하면 된다. 단, 중복되는 수열을 여러 번 출력하면 안된다. 모든 경우의 수를 구하는 백트래킹 기법을 사용하면서 적절한 조건문을 추가하면 풀 수 있다. #풀이 #include #include using namespace std; int n,m; int arr[10]; int num[10]; int che..
#문제 2908번: 상수 https://www.acmicpc.net/problem/2908 2908번: 상수 상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 www.acmicpc.net #접근방법 두 수를 입력받고 거꾸로 바꾼 다음 비교를 하면 된다. #풀이 #include int f(int x){ int ans = 0; for(int i=x;i;i/=10) ans = ans*10 + i%10; return ans; } int main(){ int a,b; scanf("%d %d",&a,&b); a = f(a); b = f(b); if(a>b) printf("%d\n..