코딩테스트 대비 200

[Baekjoon/Python] 21736번 : 헌내기는 친구가 필요해 - 효과는 굉장했다!

21736번: 헌내기는 친구가 필요해 2020년에 입학한 헌내기 도연이가 있다. 도연이는 비대면 수업 때문에 학교에 가지 못해 학교에 아는 친구가 없었다. 드디어 대면 수업을 하게 된 도연이는 어서 캠퍼스 내의 사람들과 친해지고 www.acmicpc.net 알고리즘 분류 그래프 이론 그래프 탐색 너비 우선 탐색 깊이 우선 탐색 SOLUTION import sys from collections import deque def main(): N, M = map(int, sys.stdin.readline().split()) campus = [list(sys.stdin.readline().rstrip()) for _ in range(N)] visited = [[False] * M for _ in range(N)]..

[Softeer/Python] H-클린알파 ★★★★☆ - 효과는 굉장했다

Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai SOLUTION import sys P, N = map(int, sys.stdin.readline().split()) virus = list(map(int, sys.stdin.readline().split())) ans = 0 mod = 1000000007 for i in range(N-2, -1, -1): # pow 함수를 이용해 효율적인 나머지 연산 virus[i] *= pow(P, (N-i-1), mod) print(sum(virus) % mod) pow() 함수를 이용해 효율적인 나머지 연산을 하여 시간 복잡도를 줄여서 통과 시킬 수 있다. 만약, 나머지를 pow(P, (N-i-1), mod) 형태가 아닌 pow(..

[Softeer/Python] 복잡한 조립라인2 ★★★★★ - 효과는 굉장했다!

Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai SOLUTION 실패한 코드 import sys K, N = map(int, sys.stdin.readline().split()) dp = [] travel_time = [] for i in range(N-1): line = list(map(int, sys.stdin.readline().split())) dp.append(line[:K]) travel_time.append(line[-1]) dp.append(list(map(int, sys.stdin.readline().split()))) for i in range(N-1): for j in range(K): if i == j: dp[i+1][j] += dp[i][j] e..

[Softeer/Python] 복잡한 조립라인1 ★★★★☆ - 효과는 굉장했다!

Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai SOLUTION import sys K, N = map(int, sys.stdin.readline().split()) dp = [] travel_time = [[[0 for i in range(K)] for j in range(K)] for k in range(N)] for i in range(N-1): line = list(map(int, sys.stdin.readline().split())) dp.append(line[:K]) # 작업 시간 cnt = 0 for j in range(K): for k in range(K): if j == k: continue # 각 작업장 사이를 이동하는 시간들을 전부 할당 travel..

[Softeer/Python] 징검다리2 ★★★★☆ - 효과는 굉장했다!

Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai SOLUTION import sys import bisect # 이분 탐색 N = int(sys.stdin.readline()) stone_height = list(map(int, sys.stdin.readline().split())) dp_front = [stone_height[0]] # 앞 쪽 기준 밟을 수 있는 돌의 유효한 오름차순 높이 dp_back = [stone_height[-1]] # 뒷 쪽 기준 밟을 수 있는 돌의 유효한 오름차순 높이 front_cnt = [1] * N # 앞에서 부터 밟은 돌의 갯수 back_cnt = [1] * N # 뒤에서 부터 밟은 돌의 갯수 # 앞 쪽 기준 for i in rang..

[Softeer/Python] [인증평가(1차) 기출] 로봇이 지나간 경로 ★★★☆☆ - 효과는 굉장했다!

Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai SOLUTION import sys from collections import deque def check(x, y): cnt = 0 for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0 오른쪽으로 회전 ans.append("R") current = next cnt = 1 for i in ans: print(i, end="") sys.exit() "명령어의 개수를 최소화하면서 목표를 달성할 수 있는 방법이 여러 가지라면, 그 중 한 가지를 아무거나 출력하면 된다." 라는 조건이 있으므로 만족하는 경로를 찾으면 sys.exit()을 이용해 바로 프로그램을 종료시킨다. 이 문제는 처..

[Baekjoon/Python] 17144번: 미세먼지 안녕! - 효과는 굉장했다!

17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net 알고리즘 분류 구현 시뮬레이션 SOLUTION import sys from copy import deepcopy # 미세먼지 확산 def spread(): dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] tmp_maps = [[0]*C for _ in range(R)] tmp_maps[air_up][0], tmp_maps[air_down][0] = -1, -1 for row in range(R): for col in range(C): if h..

[Baekjoon/Python] 14938번: 서강그라운드 - 효과는 굉장했다!

14938번: 서강그라운드 예은이는 요즘 가장 인기가 있는 게임 서강그라운드를 즐기고 있다. 서강그라운드는 여러 지역중 하나의 지역에 낙하산을 타고 낙하하여, 그 지역에 떨어져 있는 아이템들을 이용해 서바이벌을 www.acmicpc.net 알고리즘 분류 그래프 이론 데이크스트라 플로이드–워셜 SOLUTION Dijkstra O(NlogN) import sys import heapq INF = sys.maxsize def dijkstar(start): heap = [] distance = [INF] * (n+1) heapq.heappush(heap, (0, start)) distance[start] = 0 while heap: wei, now = heapq.heappop(heap) if distance[n..

[Baekjoon/Python] 14502번: 연구소 - 효과는 굉장했다!

14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 알고리즘 분류 구현 그래프 이론 브루트포스 알고리즘 그래프 탐색 너비 우선 탐색 SOLUTION import sys from collections import deque def check_safe(copy_map): # 0인 지역을 탐색해서 카운트 해준다 cnt = 0 for i in range(N): for j in range(M): if copy_map[i][j] == 0: cnt += 1 ans.append(cnt) def build_wall(cnt): if cnt ==..

[Baekjoon/Python] 13172번: Σ - 효과는 굉장했다!

import sys import math mod = int(1e9+7) def Divide_and_Conquer(num, exp): if exp == 1: # 기댓값이 1 이면 return num if exp % 2 == 0: half = Divide_and_Conquer(num, exp//2) return half * half % mod else: return num * Divide_and_Conquer(num, exp-1) % mod M = int(sys.stdin.readline()) total = 0 for _ in range(M): N, S = map(int, sys.stdin.readline().split()) gcd = math.gcd(N, S) # 최대공약수 N //= gcd S //= g..