반응형

알고리즘 142

[파이썬, Python] 백준 9461: 파도반 수열

문제 https://www.acmicpc.net/problem/9461 9461번: 파도반 수열 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 www.acmicpc.net 코드 li = [0 for i in range(101)] li[1],li[2],li[3] = 1, 1, 1 for i in range(4, 101): li[i] = li[i-2] + li[i-3] t = int(input()) for _ in range(t): n = int(input()) print(li[n]) 설명 다이나믹 프로그래밍으로 규칙을 찾아서 구현을 하는 문제이다. 4번째 삼각형부터,..

[파이썬, Python] 백준 4153: 직각삼각형

문제 https://www.acmicpc.net/problem/4153 4153번: 직각삼각형 입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다. www.acmicpc.net 코드 while True: nums = list(map(int, input().split())) if sum(nums) == 0: break max_num = max(nums) nums.remove(max(nums)) if nums[0]**2 + nums[1]**2 == max_num**2: print("right") else: print("wrong") 설명 직각 삼각형의 변의 길이는 피타고라스의 정리를 이..

[파이썬, Python] 백준 3009: 네 번째 점

문제 https://www.acmicpc.net/problem/3009 3009번: 네 번째 점 세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오. www.acmicpc.net 코드 x_list = [] y_list = [] for i in range(3): a, b = map(int, input().split()) x_list.append(a) y_list.append(b) for i in range(3): if x_list.count(x_list[i]) == 1: x = x_list[i] if y_list.count(y_list[i]) == 1: y = y_list[i] print(x, y) 설명 나머지 한 점의 좌표는 입력 받은 각각의 x,..

[파이썬, Python] 백준 1085: 직사각형에서 탈출

문제 https://www.acmicpc.net/problem/1085 1085번: 직사각형에서 탈출 한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램 www.acmicpc.net 코드 x, y, w, h = map(int, input().split()) print(min([x, y, w-x, h-y])) 설명 한수가 지금 x, y에 위치하므로 직사각형의 경계선까지 가는 최단 거리는 가장 가까운 변까지의 일직선 거리다. 이를 구하기 위해 [x, y, w-x, h-y]의 값 중에 최솟값을 출력하면 된다. 즉, 밑변과 양 옆 변까지의 길이 중 최솟값을 ..

[파이썬, Python] 백준 11478: 서로 다른 부분 문자열의 개수

문제 https://www.acmicpc.net/problem/11478 11478번: 서로 다른 부분 문자열의 개수 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하이다. www.acmicpc.net 코드 s = input() text = set() for i in range(len(s)): for j in range(i, len(s)): text.add(s[i:j+1]) print(len(text)) 설명 이중 반복문을 통해 해결했다. 우선 i의 범위를 s의 개수로 잡아주고, j의 범위를 i부터 s의 개수로 잡아주어 모든 문자열을 돌 수 있게 하고, i부터 j+1까지의 범위를 text에 추가하여 부분 문자열을 구한다. 이 때, text는 set 형태의 자..

[파이썬, Python] 백준 1764: 듣보잡

문제 https://www.acmicpc.net/problem/1764 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. www.acmicpc.net 코드 n, m = map(int, input().split()) a = set() for i in range(n): a.add(input()) b = set() for i in range(m): b.add(input()) result = sorted(list(a & b)) print(len(result)) for i in result: print(i) 설명 우선 set을 통해 각 명단을 받..

[파이썬, Python] 백준 10816: 숫자 카드 2

문제 https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 코드 import sys input = sys.stdin.readline n = input() card_list = list(map(int,input().split())) m = input() num_list = list(map(int,input().split())) cnt = {} for i in card_list: if i in cnt: cnt[i] +=..

[파이썬, Python] 백준 1620: 나는야 포켓몬 마스터 이다솜

문제 https://www.acmicpc.net/problem/1620 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net 코드 import sys input = sys.stdin.readline n, m = map(int, input().split()) poke_list = {} for i in range(1, n+1): poke = input().rstrip() poke_list[i] = poke poke_list[poke] = i for _ in range(m): q = inpu..

[파이썬, Python] 백준 1018: 체스판 다시 칠하기

문제 https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 코드 import sys input = sys.stdin.readline n, m = map(int, input().split()) origin = [] cnt = [] for _ in range(n): origin.append(input()) for a in range(n-7): for b in range(m-7): index1 = 0 index2 = 0 for i in range(..

[파이썬, Python] 백준 7568: 덩치

문제 https://www.acmicpc.net/problem/7568 7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net 코드 import sys input = sys.stdin.readline n = int(input()) body_list = [] score = [int(1)]*n for _ in range(n): x, y = map(int, input().split()) body_list.append((x,y)) for i in range(n): for j in range(n): if body..

반응형