Programming/Algorithm 237

[백준] #2168 타일 위의 대각선 python

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..

[백준] #1308 D-Day python

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..

[백준] #1240 노드사이의 거리 python

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 ..

[백준] #1972 놀라운 문자열 python

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] + ..

[백준] #1431 시리얼 번호 python

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

[백준] #1235 학생 번호 python

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..

[백준] #1251 단어 나누기 python

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]..

[백준] #2630 색종이 만들기 python

https://www.acmicpc.net/problem/2630 2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. www.acmicpc.net 📕 설명 📕 divide and conquer 방법을 사용하였다. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 import sys def divide_conquer(x, y, N): global cut, blue color = paper[x][y] for i in range(x, x + N): for j in range(y, y + N): if color != paper[i][j]: d..

[백준] #1780 종이의 개수 python

https://www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수 www.acmicpc.net 📕 설명 📕 dfs를 활용하여 종이가 있는 부분을 찾기 위해서 size 살피었다. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 import sys def solution(x, y, N): global minus_one, zero, one color = paper[x][y] for i in range(x, x + N): for j in range(y, y + N): if color != paper[i][..

[백준] #2161 카드1 python

https://www.acmicpc.net/problem/2161 2161번: 카드1 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 📕 설명 📕 아래 수식과 같이 맨 앞에 것을 넣고, 그리고 바로 뒤의 것을 빼어 바로 맨 뒤로 보내주는 형식이다. 홀짝 개념으로 다가가봤는데 예외처리하기 귀찮아서 그냥 코드를 바꾸었다. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 N = int(input()) N_list = [i+1 for i in range(N)] result = [] while len(N_list) != 1: result.append(N_..