반응형

분류 전체보기 268

[파이썬, Python]] 백준 5086: 배수와 약수

문제 https://www.acmicpc.net/problem/5086 5086번: 배수와 약수 각 테스트 케이스마다 첫 번째 숫자가 두 번째 숫자의 약수라면 factor를, 배수라면 multiple을, 둘 다 아니라면 neither를 출력한다. www.acmicpc.net 코드 while True: a, b = map(int, input().split()) if a == 0: break if b % a == 0: print('factor') elif a % b == 0: print('multiple') else: print('neither') 설명 조건문을 이용하여 간단하게 풀이가 가능한 문제였다. a와 b가 0일 때, 종료해야 하므로 a==0에 break문을 넣어주었다.

[파이썬, Python] 백준 11659: 구간 합 구하기 4

문제 https://www.acmicpc.net/problem/11659 11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net 코드 import sys input = sys.stdin.readline n, m = map(int,input().split()) num = list(map(int, input().split())) for i in range(n-1): num[i+1] += num[i] num = [0] + num for _ in range(m): i, j = map(int,input(..

[파이썬, Python] 백준 1463: 1로 만들기

문제 https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 코드 n = int(input()) d = [0] * (n+1) for i in range(2, n+1): d[i] = d[i-1] + 1 if i % 3 == 0: d[i] = min(d[i], d[i//3]+1) if i % 2 == 0: d[i] = min(d[i], d[i//2]+1) print(d[n]) 설명 우선 n+1 개 만큼의 0으로 이루어진 리스트를 만들어준다. 이후 i번째의 값을 i-1번째에 1을 더해준 값으로 우선 지정해준다. 만약 i가 2혹은 3으로 나누어지는 수라면 이 수와 2혹은 ..

[파이썬, Python] 백준 2579: 계단 오르기

문제 https://www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 코드 n = int(input()) score = [0 for _ in range(n+1)] stair = [0 for _ in range(n+1)] for i in range(1, n+1): stair[i] = int(input()) score[1] = stair[1] for i in range(2, n+1): if i == 2: score[i] = score[1] + stair[2] elif i ==..

[파이썬, 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] 백준 24416: 피보나치 수 1

문제 https://www.acmicpc.net/problem/24416 24416번: 알고리즘 수업 - 피보나치 수 1 오늘도 서준이는 동적 프로그래밍 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. 오늘은 n의 피보나치 수를 재귀호출과 동적 프로그래밍 www.acmicpc.net 코드 import sys input = sys.stdin.readline n = int(input()) cnt_2 = 0 def fib(n): if n == 1 or n == 2: return 1 else: return fib(n-1) + fib(n-2) li = [1 for i in range(41)] for i in range(2, n): li[i] = li[i-1] + l..

[파이썬, 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 형태의 자..

반응형