Programming/Algorithm
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/byB71T/btsiheFVycc/lT511Xr20SQSuF6TX3h2sK/img.png)
![](https://tistory1.daumcdn.net/tistory/5081514/skin/images/no-image.jpg)
https://www.acmicpc.net/problem/1080 1080번: 행렬 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. www.acmicpc.net 📕 설명 📕 간단한 행렬문제 풀이. 바꿔가주며 개수만 세면 쉽다. 🧑🏻💻 나의 풀이 🧑🏻💻 N, M = map(int, input().split()) A = [list(map(int, list(input()))) for _ in range(N)] B = [list(map(int, list(input()))) for _ in range(N)] cnt = 0 def convert(i, j, A): for ite..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/EOzJo/btsh6ajDmtP/kKoAMeJ4dYpIKMAMdmv3wK/img.png)
![](https://tistory1.daumcdn.net/tistory/5081514/skin/images/no-image.jpg)
https://www.acmicpc.net/problem/1629 1629번: 곱셈 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. www.acmicpc.net 📕 설명 📕 Divide and Conquer. 그냥 풀었다가 큰 코 다친 문제. 시간초과가 계속 떴다. 그래서 풀이 방법을 바꿔보았다. 분할 정복으로 풀이했다. 🧑🏻💻 나의 풀이 🧑🏻💻 def Divide_and_Conquer(a, b): if b == 1: return a % C else: temp = Divide_and_Conquer(a, b // 2) if b % 2 == 0: return temp * temp % C else: return temp ..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/uhZtM/btshG7olDTU/1iLxMTZbBjVZan6L6mH8k1/img.png)
![](https://tistory1.daumcdn.net/tistory/5081514/skin/images/no-image.jpg)
https://www.acmicpc.net/problem/2168 2168번: 타일 위의 대각선 첫째 줄에 가로의 길이 xcm와 세로의 길이 ycm가 주어진다. x와 y는 1,000,000,000 이하의 자연수이다. x와 y사이에는 빈칸이 하나 이상 있다. www.acmicpc.net 📕 설명 📕 유클리드 호제법. 대각선이 지나는 점의 개수는 x, y의 최대공약수임을 그림 그려서 알아냈다. 그리고 대각선이꼭지점을 지나가는 사각형은 x + y - 1 지나가지 않는 사각형은 x + y -1 -(점의 개수) 그래서, x + y - gcd(x, y) 라는 식을 구할 수 있다. 🧑🏻💻 나의 풀이 🧑🏻💻 def gcd(x, y): if y == 0: return x else: return gcd(y, x % y..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/bZS2Cx/btshAwbum0x/kEm7krQw0jHmXtxJJ4RXb1/img.png)
![](https://tistory1.daumcdn.net/tistory/5081514/skin/images/no-image.jpg)
https://www.acmicpc.net/problem/1308 1308번: D-Day 첫째 줄에 오늘의 날짜가 주어지고, 두 번째 줄에 D-Day인 날의 날짜가 주어진다. 날짜는 연도, 월, 일순으로 주어지며, 공백으로 구분한다. 입력 범위는 1년 1월 1일부터 9999년 12월 31일 까지 이다. www.acmicpc.net 📕 설명 📕 python의 list를 사용하고, python의 datetime의 toordinal이라는 것을 알게되었다. 🧑🏻💻 나의 풀이 🧑🏻💻 from datetime import * today = list(map(int, input().split())) d_day = list(map(int, input().split())) if today[0] + 1000 < d_da..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/WXkA1/btshwmLysNn/EvZBHqEqlF0K0kfXpNivW1/img.png)
![](https://tistory1.daumcdn.net/tistory/5081514/skin/images/no-image.jpg)
https://www.acmicpc.net/problem/1240 1240번: 노드사이의 거리 N(2≤N≤1,000)개의 노드로 이루어진 트리가 주어지고 M(M≤1,000)개의 두 노드 쌍을 입력받을 때 두 노드 사이의 거리를 출력하라. www.acmicpc.net 📕 설명 📕 python의 list로 구현하여서 트리를 구성하였다. dfs를 이용하여 구현하였다. 노드 사이의 연결을 dfs로 오랜만에 써보려니 잘 써지지 않았다. 계속 복습해줘야지.... sys.setrecursionlimit(10**9) 도 까먹었다.. ㅠ 🧑🏻💻 나의 풀이 🧑🏻💻 import sys sys.setrecursionlimit(10**9) def dfs(start, end, distance): global count if ..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/J7iH8/btshhKusjP0/LeSPj9pUR3Kk69XKGtvsp0/img.png)
![](https://tistory1.daumcdn.net/tistory/5081514/skin/images/no-image.jpg)
https://www.acmicpc.net/problem/1972 1972번: 놀라운 문자열 대문자 알파벳으로만 이루어져 있는 문자열이 있다. 이 문자열에 대해서 ‘D-쌍’이라는 것을 정의할 수 있는데, 이 문자열에 포함되어 있는, 거리가 D인 두 문자를 순서대로 나열한 것을 이 문 www.acmicpc.net 📕 설명 📕 문자를 추출하여 각 문자에 대해서 pair를 계산하여 확인한다. 🧑🏻💻 나의 풀이 🧑🏻💻 for _ in range(100): S = input().rstrip() if S == "*": break for index in range(1, len(S) - 1): check_not_sur = set() for i in range(len(S) - index): pair = S[i] + ..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/bLl3vg/btshgpV00bs/KQpkeNrFjJXk7tNiSxPhMk/img.png)
![](https://tistory1.daumcdn.net/tistory/5081514/skin/images/no-image.jpg)
https://www.acmicpc.net/problem/1431 1431번: 시리얼 번호 첫째 줄에 기타의 개수 N이 주어진다. N은 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루어 www.acmicpc.net 📕 설명 📕 숫자와 문자에 대해서 값을 계산하고 그 값에 대해서 정렬을 수행했다. 🧑🏻💻 나의 풀이 🧑🏻💻 N = int(input()) li = [] for _ in range(N): S = input() count = 0 for s in S: if 48
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/yEJr0/btsg9PVy4he/x0bT5saCeUtPzwbn6mZkVK/img.png)
![](https://tistory1.daumcdn.net/tistory/5081514/skin/images/no-image.jpg)
https://www.acmicpc.net/problem/1235 1235번: 학생 번호 첫째 줄에는 학생의 수 N(2≤N≤1,000)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 학생의 학생 번호가 순서대로 주어진다. 모든 학생들의 학생 번호는 서로 다르지만 그 길이는 모두 같으며, 0부 www.acmicpc.net 📕 설명 📕 반복문과 indexing을 이용하여 풀이하였다. 🧑🏻💻 나의 풀이 🧑🏻💻 import sys def find_num(n): global ids for _ in range(n): ids.append(str(input())) for i in range(1, len(ids[0]) + 1): results = [] for j in range(n): if ids[j][-i:] in..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/sg7NM/btsg0WUU24e/60qxF7gDkFodC6bdo6RxK0/img.png)
![](https://tistory1.daumcdn.net/tistory/5081514/skin/images/no-image.jpg)
https://www.acmicpc.net/problem/1251 1251번: 단어 나누기 알파벳 소문자로 이루어진 단어를 가지고 아래와 같은 과정을 해 보려고 한다. 먼저 단어에서 임의의 두 부분을 골라서 단어를 쪼갠다. 즉, 주어진 단어를 세 개의 더 작은 단어로 나누는 것이다 www.acmicpc.net 📕 설명 📕 문제에 제시된 방법대로, 1. 먼저 단어에서 임의의 두 부분을 골라서 단어를 쪼갠다. 2.이제 이렇게 나눈 세 개의 작은 단어들을 앞뒤를 뒤집는다. 3. 이를 다시 원래의 순서대로 합친다. 🧑🏻💻 나의 풀이 🧑🏻💻 W = input() result = [] for i in range(1, len(W)): for j in range(i + 1, len(W)): case1 = W[:i]..