practivceAlgorithm 570

[SWEA][Python] 2001 파리퇴치

구현문제 풀듯 정석으로 다 세줬다. 더 좋은 방법이 있으려나? import sys sys.stdin = open('input.txt') # 파리채로 쳐 죽입니다. def count_kill_flies(x,y, fly_killer_size, matrix): kill = 0 for i in range(x, x+fly_killer_size): kill += sum(matrix[i][y:y+fly_killer_size]) return kill def kill_flies(matrix_size, fly_killer_size): matrix = [list(map(int, input().split())) for _ in range(matrix_size)] # 파리채로 칠 범위를 지정합니다.(왼쪽 위 idx) kill_..

[SWEA][Python] 4836 색칠하기

색깔 2개 말고 더 늘어나도 대응가능. 근데 메모리는..? 모르겠다ㅎㅎ import sys sys.stdin = open('input.txt') def color_areas(color_cnt): # 색을 칠할 칠판입니다. matrix = [[[] for _ in range(10)] for _ in range(10)] for _ in range(color_cnt): r1, c1, r2, c2, color = map(int, input().split()) # 내 색깔이 칸에 안칠해져있다면 칠합니다. for i in range(r1, r2+1): for j in range(c1, c2+1): if not color in matrix[i][j]: matrix[i][j].append(color) # 원하는 색이 ..

[SWEA][Python] L4839 이진탐색

이진탐색.. cnt를 곁들인.. import sys sys.stdin = open('input.txt') # 좌우로 부터 조여 몇번 조여야 원하는 n값에 도달하는지 체크합니다. def binary_search(P, n): left = 1 right = P cnt = 0 while left n: right = mid else: break return cnt def find_winner(): P, A, B = map(int, input().split()) if P == 1 or A == B: return 0 a_cnt = binary_search(P, A) b_cnt = binary_search(P, B) # 체크한 횟수를 비교해 결과를 반환합니다. if a_cnt > b_cnt: return 'B' eli..

[SWEA][Python] 1210 ladder1

말은 사다리게임이고 실상은 사다리 오르기 게임. 좌우 선탐색BFS로 풀었슴니다. import sys sys.stdin = open('input.txt') from collections import deque def find_start(ladder): for i in range(100): for j in range(100): if ladder[i][j] == 2: return i, j # 사다리게임을 합니다. def do_ladder_game(ladder): visited = [[False for _ in range(100)] for _ in range(100)] init_x, init_y = find_start(ladder) # 도착지를 찾습니다. dx = [0, 0, -1] dy = [1, -1, 0]..

[백준][Python] 9372 상근이의 여행

사실 연결그래프의 최소갯수는 항상 n-1이다.. 최대는 n(n-1) import sys input = sys.stdin.rewadline def DFS(v,cnt): for next_node in graph[v]: if not visited[next_node]: visited[next_node] = True cnt = DFS(next_node,cnt+1) return cnt for test in range(1, int(input())+1): N, M = map(int, input().split()) graph = {i:[] for i in range(1, N+1)} visited = {i:False for i in range(1, N+1)} for _ in range(M): a, b = map(int,i..

[SWEA][Python] 1954 달팽이숫자

사방탐색형 달팽이 숫자 그렸습니다.(분할정복은 안함) import sys sys.stdin = open('input.txt') def make_snail(n): dx = [0, 1, 0, -1] dy = [1, 0, -1, 0] complete_snail = [[0 for _ in range(n)] for _ in range(n)] # 0,0 에서 초기화 cnt = 1 direction = 0 x, y = 0, 0 complete_snail[x][y] = cnt # cnt 가 모든 칸에 기록될때까지 while cnt != N**2: nx = x + dx[direction] ny = y + dy[direction] if 0

[SWEA] 1209 배열의 최댓값 구하기

2차원 배열 가로, 세로, 대각선 중 합의 최댓값 구하는 문제. import sys sys.stdin = open('input.txt') def find_max(arr): max_sum = 0 # 행 조사 for row in range(100): sum_row = sum(arr[row]) if max_sum < sum_row: max_sum = sum_row # 열 조사 for column in range(100): sum_column = sum([k for k in zip(*arr)][column]) if max_sum < sum_column: max_sum = sum_column # 대각선 조사 sum_diagonal1 = 0 sum_diagonal2 = 0 for i in range(100): su..

[백준][Python] 18808 스티커 붙히기

2차원 배열회전 문제. 이문제는 따로 notebook배열을 늘려줄 필요가 없어서 그나마 설계하기 쉬웠다. 저번 문제보다 훨씬.. 90도 회전 외워두니까 진짜 넘 편한듯. [k[::-1] for k in zip(*list)] import sys input = sys.stdin.readline # 검사하기 def is_matching(x, y, sticker, R, C): for i in range(x, x+R): for j in range(y, y+C): if notebook[i][j] and sticker[i-x][j-y]: return False for i in range(x, x+R): for j in range(y, y+C): if sticker[i-x][j-y]: notebook[i][j]=1 r..