전체 글 219

[Baekjoon/Python] 2606번: 바이러스 - 효과는 굉장했다!

2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 알고리즘 분류 그래프 이론 그래프 탐색 너비 우선 탐색 깊이 우선 탐색 SOLUTION import sys from collections import deque def main(): computer = {} visit = [] for i in range(int(sys.stdin.readline())): computer[i+1] = [] for j in range(int(sys.stdin.readline())): num1, num2 = map(int, sys.stdin..

[Baekjoon/Python] 1463번: 1로 만들기 - 효과는 굉장했다!

1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 알고리즘 분류 다이나믹 프로그래밍 SOLUTION import sys N = int(sys.stdin.readline()) dp = [0 for _ in range(N+1)] for i in range(2, N+1): dp[i] = dp[i-1] + 1 # 1을 빼는 경우 일 때 if i % 2 == 0 and dp[i] > dp[i//2] + 1: # 2로 나누어 떨어지면 2로 나눈 수 에서 횟수 + 1 dp[i] = dp[i//2] + 1 if i % 3 == 0 and dp[i] > dp[i//3] + 1: # 3으로 나누어 떨어지면 3으로 나눈 수 에서 횟수 + 1 d..

[Softeer/Python] [21년 재직자 대회 예선] 전광판 ★★☆☆☆ - 효과는 굉장했다!

Softeer 제한시간 : C/C++/Java/JS/Python(1초)| 메모리 제한 : 1024MB 제약조건 하나의 입력에서 1개 이상 1000개 이하의 테스트 케이스를 해결해야 한다. A와 B는 한 자리 이상 다섯 자리 이하의 자연수이다. A와 B softeer.ai SOLUTION import sys # 각 숫자에서 빈 전광판,0,1,2,3,4,5,6,7,8,9 로 바뀔 때 눌러야하는 스위치 횟수 dictionary 형태로 저장 # 마지막 ' ' 는 빈 전광판 에서 숫자로 바뀔 때 눌러야하는 스위치 횟수 num = { '0' : ['6','0','4','3','3','4','3','2','2','1','2'], '1' : ['2','4','0','5','3','2','5','6','2','5','4..

[Softeer/Python] [21년 재직자 대회 예선] 비밀메뉴 ★★☆☆☆ - 효과는 굉장했다!

Softeer 제한시간 : C/C++/Java/JS/Python(1초)| 메모리 제한 : 1024MB 회사 식당에는 전설처럼 전해 내려오는 비밀 메뉴에 대한 소문이 있다. 소문의 내용은 대강 이러하다. 식권 자판기의 버튼을 특정 순서대로 softeer.ai SOLUTION import sys M, N, K = map(int, sys.stdin.readline().split()) secret_menu = ''.join(list(sys.stdin.readline().rstrip().split())) # join 함수를 이용해 리스트로 받은 secret_menu를 문자열화 시킴 button = ''.join(list(sys.stdin.readline().rstrip().split())) # join 함수를 이..

[Softeer/Python] 금고털이 ★★☆☆☆ - 효과는 굉장했다!

Softeer 제한시간 : C/C++(1초), Java/Python/JS(2초) | 메모리 제한 : 256MB 루팡은 배낭을 하나 메고 은행금고에 들어왔다. 금고 안에는 값비싼 금, 은, 백금 등의 귀금속 덩어리가 잔뜩 들어있다. 배낭은 W ㎏까지 softeer.ai SOLUTION import sys W, N = map(int, sys.stdin.readline().split()) jewels = [list(map(int, sys.stdin.readline().split())) for _ in range(N)] jewels = sorted(jewels, key=lambda x: x[1], reverse=True) # lambda함수와 reverse=T를 사용하여 가치가 높은 순 으로 정렬 / 무게순으로..

[Softeer/Python] 바이러스 ★★☆☆☆ - 효과는 굉장했다!

Softeer 제한시간 : C/C++(1초), Java/Python/JS(2초) | 메모리 제한 : 256MB 바이러스가 숙주의 몸속에서 1초당 P배씩 증가한다. 처음에 바이러스 K마리가 있었다면 N초 후에는 총 몇 마리의 바이러스로 불어날까? N softeer.ai SOLUTION import sys K, P, N = map(int, sys.stdin.readline().split()) # pow() 계산시 mod값 설정을 하여 시간단축을 시킨 후 K를 곱한 값이 1e9+7 을 넘어갈 수 있기 때문에 한번더 1e9+7로 나눈 나머지 값을 구한다 print(K*pow(P,N, int(1e9+7)) % int(1e9+7))

[Baekjoon/Python] 17626번: Four Squares - 효과는 굉장했다!

17626번: Four Squares 라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수의 방법으로 표현된다. 예를 들면, 26은 52과 12의 합이다; 또한 42 + 32 + 1 www.acmicpc.net 알고리즘 분류 다이나믹 프로그래밍 브루트포스 알고리즘 SOLUTION ※ 시간초과로 인해 pypy3으로 제출 import sys N = int(sys.stdin.readline()) dp = [0,1] # N = 0,1 일때 값 설정 for i in range(2, N+1): min_value = sys.maxsize # 충분히 큰 수로 둠 j = 1 while (j**2)

[Baekjoon/Python] 17219번: 비밀번호 찾기 - 효과는 굉장했다!

17219번: 비밀번호 찾기 첫째 줄에 저장된 사이트 주소의 수 N(1 ≤ N ≤ 100,000)과 비밀번호를 찾으려는 사이트 주소의 수 M(1 ≤ M ≤ 100,000)이 주어진다. 두번째 줄부터 N개의 줄에 걸쳐 각 줄에 사이트 주소와 비밀번 www.acmicpc.net 알고리즘 분류 자료 구조 해시를 사용한 집합과 맵 SOLUTION import sys N, M = map(int, sys.stdin.readline().split()) site_password = {} for _ in range(N): site, password = sys.stdin.readline().split() site_password[site] = password # key value 를 활용해 사이트에 해당하는 비밀번호를 담..

[Baekjoon/Python] 1764번: 듣보잡 - 효과는 굉장했다!

1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. www.acmicpc.net 알고리즘 분류 자료 구조 문자열 정렬 해시를 사용한 집합과 맵 SOLUTION import sys N, M = map(int, sys.stdin.readline().rstrip().split()) hear_people = [sys.stdin.readline().rstrip() for i in range(N)] # 듣도 못한 사람 명단 see_people = [sys.stdin.readline().rstrip() for i in range(M)] # 보도 못한 ..

[Baekjoon/Python] 1676번: 팩토리얼 0의 개수 - 효과는 굉장했다!

1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net 알고리즘 분류 수학 SOLUTION from math import factorial # factorial 함수를 쓰기 위해 import math import sys N = int(sys.stdin.readline()) factorial_str = str(factorial(N)) cnt = 0 for i in range(len(factorial_str)-1,-1,-1): # 0의 개수 탐색 if factorial_str[i] == '0': # 0이면 cnt += 1 cnt += 1 else: # 0이 아니면 for 문 종료 break print(cnt)