목록Study/Algorithm (400)
hwooo
https://www.acmicpc.net/problem/1308 1308번: D-Day첫째 줄에 오늘의 날짜가 주어지고, 두 번째 줄에 D-Day인 날의 날짜가 주어진다. 날짜는 연도, 월, 일순으로 주어지며, 공백으로 구분한다. 입력 범위는 1년 1월 1일부터 9999년 12월 31일 까지 이다.www.acmicpc.net풀이의외로 윤년 조건이 은근 까다로웠다. 년도가 같을 때, 달이 같을 때를 나눠서 짰다문제 풀 때 넣어봤던 반례들은 아래에서 확인 가능하다 반례더보기반례// 윤년 조건 2000 1 1 2001 1 1 D-366 2004 1 1 2005 1 1 D-366 1000 1 1 1001 1 1 D-365 2100 1 1 2101 1 1 D-365 // 연도 같을 때 2000 1 1 2000..
https://www.acmicpc.net/problem/1022 1022번: 소용돌이 예쁘게 출력하기 첫째 줄에 네 정수 r1, c1, r2, c2가 주어진다. www.acmicpc.net 풀이 움직이는 방향은 (0,1) -> (-1,0) -> (0,-1) -> (1,0) , 오른쪽 -> 위쪽 -> 왼쪽 -> 아래쪽. 1칸씩 이동이 2번, 2칸씩 이동이 2번 ... n칸씩 이동이 2번씩이다. n칸씩 이동하며 이동한 좌표가 배열 안에 위치했다면 값을 저장하고, 저장한 횟수가 배열의 크기와 같아진다면 출력. (출력 함수에 저장된 최댓값의 자릿수에 맞춰 출력함 (다른 분들은 배열에 저장된 값과 최댓값을 비교해서 공백 출력하는 분들이 많았어요) 코드 #include int A[60][10]; void D(in..
https://www.acmicpc.net/problem/2028 2028번: 자기복제수 어떤 자연수 N을 제곱했을 때, 그 제곱수의 맨 뒷자리에 원래의 수 N이 다시 나타나면, 우리는 그 수 N을 자기복제수라고 한다. 예를 들면, 5의 제곱은 52는 25이고 25의 맨 뒷자리에 원래의 수 5가 www.acmicpc.net 코드 #include bool Copy(int n) { int Pow = n * n; while (n != 0) { if (n % 10 != Pow % 10) return false; n /= 10, Pow /= 10; } return true; } int main() { int T, N; scanf("%d", &T); for (int t = 0; t < T; t++) { scanf(..
https://www.acmicpc.net/problem/14494 14494번: 다이나믹이 뭐예요? (1, 1)에서 (n, m)에 도달하는 경우의 수를 구하여라. 단, 경우의 수가 엄청 커질 수 있으므로 경우의 수를 1,000,000,007(=109+7)로 나눈 나머지를 출력한다. www.acmicpc.net 풀이 D[i][j]에 도달하는 경우의 수는 →, ↓, ↘의 세 방향에서 오는 경우의 수의 합이다. 코드 #include unsigned int DP[1001][1001]; int main() { int n, m; scanf("%d %d", &n, &m); for (int i = 1; i
https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net 풀이 노드가 순서대로 주어지는 게 아니라서 벡터로 연결 리스트 생성, 해당 알파벳에 자식 노드를 저장함.부모-자식 관계는 1개씩만 입력되므로 자식은 모두 V[][0] 배열에서 찾고, 저장된 값이 알파벳일 때만 탐색. 코드 #include #include #include #include using namespace std; vector V[26]; void Preorder(int root..
https://www.acmicpc.net/problem/10953 10953번: A+B - 6 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 코드 #include int main() { int n, a, b; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d,%d", &a, &b); printf("%d\n", a + b); } return 0; }
https://www.acmicpc.net/problem/10817 10817번: 세 수 첫째 줄에 세 정수 A, B, C가 공백으로 구분되어 주어진다. (1 ≤ A, B, C ≤ 100) www.acmicpc.net 코드 #include int main() { int a, b, c; scanf("%d %d %d", &a, &b, &c); if (a > b) { // a>b>c if (b > c) printf("%d", b); //a>c>=b else if (a > c) printf("%d", c); //c>=a>b else printf("%d", a); } //b>=a else { //b>=a>c if (a > c) printf("%d", a); // b>=c>=a else if (b > c) prin..
https://www.acmicpc.net/problem/11478 11478번: 서로 다른 부분 문자열의 개수 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하이다. www.acmicpc.net 풀이 주어진 문자열을 입력 받아 해당 문자열의 부분 문자열을 set에 넣어주어 서로 다른 문자열의 개수를 구함. 코드 #include #include #include #include using namespace std; int main() { set S; string s; cin >> s; for (int i = 1; i