본문 바로가기

Algorithm(BOJ, Python)100

[백준_23352] 방탈출 python # n, m 입력 n, m = map(int, input().split()) # room 입력 room = [ list(map(int, input().split())) for _ in range(n) ] # 함수들 # in_range(x, y) def in_range(x, y): return 0 2022. 9. 26.
[백준_20055] 컨베이어 벨트 위의 로봇 python # n, k 입력 n, k = map(int, input().split()) # num_list 입력 num_list = list(map(int, input().split())) # up 설계 [내구도, 로봇 유무] up = [ [0 for _ in range(2)] for _ in range(n) ] for i in range(n): up[i][0] = num_list[i] # down 설계 down = [] for i in range(2*n-1, n-1, -1): down.append(num_list[i]) # 함수들 # zero_more_than_k() def zero_more_than_k(): # 내구도 0인 칸의 개수 zero_cnt = 0 for i in range(n): # up의 내구도가 .. 2022. 9. 21.
[백준_15662] 톱니바퀴2 python 톱니바퀴 1에서 인덱싱 처리만 더 요하는 문제였다 개꿀 ㅋ # t 입력 t = int(input()) # 톱니바퀴를 담아 줄 리스트 gears = [ [0] * 8 for _ in range(t) ] # 톱니바퀴 담아주기 for i in range(t): gear = input() for j in range(8): gears[i][j] = int(gear[j]) # 함수들 # is_connected(before_gear, after_gear) def is_connected(before_gear, after_gear): return gears[before_gear][2] != gears[after_gear][6] # cw(change_num) def cw(change_num): # 전역 변수 선언 glob.. 2022. 9. 18.
[백준_14891] 톱니바퀴 python 시뮬레이션이 짜증나는건, 분명 풀 수 있는데, 너무하기 귀찮다는 것 같다. # 톱니바퀴의 정보를 담아 줄 리스트 gears = [0, [], [], [], []] # 톱니바퀴 입력 for i in range(1, 5): gear = input() for j in gear: gears[i].append(int(j)) # 함수들 # is_connected(gear_front, gear_back) def is_connected(gear_front, gear_back): return gears[gear_front][6] != gears[gear_back][2] # cw(gear) def cw(gear): # 전역 변수 선언 global gears # temp temp = gears[gear][-1] # 돌려주기.. 2022. 9. 17.
[백준_2174] 로봇 시뮬레이션 python dx, dy 테크닉을 이해하고 있으면, 그리 어렵지 않게 해결할 수 있는 문제였다. # a, b 입력 a, b = map(int, input().split()) # n, m 입력 n, m = map(int, input().split()) # 로봇들의 정보를 담아 줄 리스트 robot_data = [0] # mapper mapper = { 'N': 0, 'E': 1, 'S': 2, 'W': 3, } # 리스트에 로봇들 정보 담아주기 for _ in range(n): x, y, dir = input().split() x, y = int(x), int(y) robot_data.append([x, y, mapper[dir]]) # 함수들 # turn_left(robot_num, times) def turn_le.. 2022. 9. 16.
[백준_18405] 경쟁적전염 python 와 이문제 생각보다 매우 까다로웠다. bfs내에서 종료조건을 걸어줘야, 시간초과에 걸리지 않고 문제를 해결할 수 있다. # n, k 입력 n, k = map(int, input().split()) # lab lab = [ list(map(int, input().split())) for _ in range(n) ] # s, r, c 입력 s, r, c = map(int, input().split()) # 함수들 # in_range(x, y) def in_range(x, y): return 0 2022. 9. 14.
[백준_22352] 항체인식 python # n, m 입력 n, m = map(int, input().split()) # case_before 입력 case_before = [ list(map(int, input().split())) for _ in range(n) ] # case_after 입력 case_after = [ list(map(int, input().split())) for _ in range(n) ] # 함수들 # test_2() def test_2(): # 색깔이 변한 횟수 cnt = 0 # 섹션의 대푯값들을 뽑기 for section in sections: x, y = section[0] if case_before[x][y] != case_after[x][y]: cnt += 1 # 두 섹션 이상에서 색깔이 변했으면, if cn.. 2022. 9. 13.
[백준_1245] 농장관리 python # n, m 입력 n, m = map(int, input().split()) # farm 입력 farm = [ list(map(int, input().split())) for _ in range(n) ] # 함수들 # is_mount_top(x, y) def is_mount_top(x, y): dxs, dys = [-1, -1, -1, 0, 0, 1, 1, 1], [-1, 0, 1, -1, 1, -1, 0, 1] for dx, dy in zip(dxs, dys): nx, ny = x + dx, y + dy # 주변 위치가 범위 내에 있으면서 현재 위치보다 높으면 실패 if in_range(nx, ny) and farm[x][y] < farm[nx][ny]: return False # 그런 산봉우리가 없으.. 2022. 9. 11.
[백준_6593] 상범빌딩 python 3차원배열 받는법좀 까먹지말자,, while True: # l, r, c 입력 l, r, c = map(int, input().split()) # 종료조건 if l == 0 and r == 0 and c == 0: break # building building = [ [[0 for _ in range(c)] for _ in range(r)] for _ in range(l) ] # building 입력받기 for h in range(l): for i in range(r): block = input() for j in range(c): # 시작 위치 저장 if block[j] == 'S': sh, sx, sy = h, i, j # 끝 위치 저장 if block[j] == 'E': eh, ex, ey = h,.. 2022. 9. 10.
[백준_17836] 공주님을 구해라 python # n, m, t 입력 n, m, t = map(int, input().split()) # castle 입력 castle = [ list(map(int, input().split())) for _ in range(n) ] # 함수들 # in_range(x, y) def in_range(x, y): return 0 t: return False # 성공시 리턴 return step[-1][-1] # 설계 # 큐 사용 준비 from collections import deque q = deque() # ans 설정 import sys ans = sys.maxsize # 검을 구하지 않고 갈 수 있는지 확인 후 if without_soward(): # ans 처리 ans = without_soward() # 검을.. 2022. 9. 9.
[백준_2589] 보물섬 python 바보같이 처음에 리커전을 통해, 두 좌표의 조합을 모두 구해 해결하려는 판단을 해 버렸고, 어림도없이 시간초과에 걸려버렸다. # 입력 속도 개선 import sys input = sys.stdin.readline # n, m 입력 n, m = map(int, input().split()) # island 설계 island = [ [0] * m for _ in range(n) ] # island 입력 for i in range(n): s = input() for j in range(m): # 땅이면 if s[j] == 'L': # 1로 처리 island[i][j] = 1 # 함수들 # in_range(x, y) def in_range(x, y): return 0 2022. 9. 5.
[백준_14499] 주사위굴리기 python # n, m, x, y, k 입력 n, m, x, y, k = map(int, input().split()) # grid 입력 grid = [ list(map(int, input().split())) for _ in range(n) ] # order_list 입력 order_list = list(map(int, input().split())) # 함수들 # in_range(x, y) def in_range(x, y): return 0 2022. 9. 4.
[백준_17141] 연구소 2 python bfs를 동시에 돌릴 줄 알아야 한다는 점과, 백트랙킹을 통해 바이러스를 놓는 조합을 모두 구해야 하는 점, 그리고 모든 바이러스가 이미 퍼져있는 상황을 판단하는 점 등이 중요했던 것 같다. # 입력 속도 개선 import sys input = sys.stdin.readline # n, m 입력 n, m = map(int, input().split()) # lab 입력 lab = [ list(map(int, input().split())) for _ in range(n) ] # 함수들 # all_done() def all_done(): # 바이러스를 놓을 수 있는 위치의 수와 m이 다르면, if len(possible_virus_pos) != m: # 실패 return False # lab 돌면서 for.. 2022. 9. 2.
[백준_16234] 인구이동 python 시뮬레이팅과 bfs를 적절히 사용하여 해결해야 한다. # n, l, r 입력 n, l, r = map(int, input().split()) # world 입력 world = [ list(map(int, input().split())) for _ in range(n) ] # 함수돌 # in_range(x, y) def in_range(x, y): return 0 2022. 8. 31.
[백준_2583] 영역 구하기 python dfs 문제를 풀때마다 느끼는거지만, 파이썬의 최대 리커전가능 횟수 디폴트값이 1000인건, 너무 야박한 것 같다. 꼭지점 좌표로 입력 받을 때, 역으로 이를 생각해야 하기에 조금 불편하겠다 싶었는데, 곰곰히 생각해보니 점대칭으로 그냥 받아도 아무차이없을 것 같아, 그대로 해봤더니 성공했다. # n, m, k 입력 n, m, k = map(int, input().split()) # grid grid = [ [0] * m for _ in range(n) ] # 꼭지점 좌표 입력 for _ in range(k): sy, sx, ey, ex = map(int, input().split()) # 직사각형 그려주기 for i in range(sx, ex): for j in range(sy, ey): grid[i].. 2022. 8. 30.
[백준_4963] 섬의 개수 python 사실 앞서 2시간 넘게 풀던 문제가 시간초과에 걸려, 오늘은 여기까지만 하자 하고 일보 후퇴하였다. 매우 쉽게 해결 가능한 문제,, while True: # w, h 입력 w, h = map(int, input().split()) # 종료조건 if w == 0 and h == 0: break # grid 입력 grid = [ list(map(int, input().split())) for _ in range(h) ] # 함수들 # in_range(x, y): def in_range(x, y): return 0 2022. 8. 29.
[백준_14503] 로봇청소기 python 확실히 시뮬레이션 문제를 풀 때에는, 여러 조건들을 함수화하여 체크하는 것이 좋은 것 같다. # n, m 입력 n, m = map(int, input().split()) # r, c, d입력 r, c ,d = map(int, input().split()) # room 입력 room = [ list(map(int, input().split())) for _ in range(n) ] # 함수들 # all_cleaned_or_wall(x, y): def all_cleaned_or_wall(x, y): dxs, dys = [-1, 1, 0, 0], [0, 0, 1, -1] for dx, dy in zip(dxs, dys): # 주변 위치 nx, ny = x + dx, y + dy # 청소안되어있는 빈칸이 나오면.. 2022. 8. 28.
[백준_1890] 점프 python 생각보다 까다로웠다, 처음에 bfs로 풀려 했으나, 시간초과에 걸리고 말았기 때문이다. # n 입력 n = int(input()) # grid 입력 grid = [ list(map(int, input().split())) for _ in range(n) ] # dp 설계 dp = [ [0] * n for _ in range(n) ] # dp 초기설정 dp[0][0] = 1 # dp 채워넣기 for i in range(n): for j in range(n): # 맨 마지막 좌표면, if i == n-1 and j == n-1: # 출력 print(dp[i][j]) break # 오른쪽으로 이동 가능한 경우 if j + grid[i][j] < n: # 이전까지 경로 수를 더해 줌 dp[i][j + grid[.. 2022. 8. 27.