목록Study/BAEKJOON (7)
줴림이 공부하줴림
여러 사람들의 코드를 보면서 공부했다. 아직 시뮬레이션 문제는 너무 어려운 듯.'''조건1. N: 공간 크기, M: 상어 번호, k: 냄새 지속 시간2. 출력: 1번 상어만 남게 되기까지의 시간 (1,000초 이상 걸려도 안 끝나면 -1 출력)[냄새 퍼뜨리기]1. 냄새 1칸 이동할 때마다 -12. 상어가 있는 칸에 냄새 퍼뜨림[이동]1. 상하좌우 중 인접한 칸 중 하나로 이동1-1. 아무 냄새가 없는 칸으로 이동1-2. 그게 없으면 자신의 냄새가 있는 칸으로 이동2. 한 칸에 여러 마리의 상어: 가장 작은 번호의 상어만 살아남음'''# 첫째 줄: N(공간의 크기), M(상어 번호), k(냄새 지속시간)# 둘째 줄: 격자의 모습 (0: 빈칸 / 0이 아님: 상어 번호)# 세번째 줄: 상어의 방향 (1: 위..
## DFS로 풀었을 때 ##'''조건1. 아기상어의 크기: 2, 크기랑 똑같은 수의 물고기 먹으면 크기 +12. 구하고자 하는 것: 몇초동안 SOS 안치고 먹을 수 있는지3. 가까운 물고기 먹으러 간다. > 가장 위에 있는 물고기 먹으러 간다. > 가장 왼쪽 먹으러 간다.4. 자기 크기보다 작은 물고기만 먹을 수 있음 (같으면 먹지는 못하고 움직일 순 있음)'''def dfs(sx, sy, d): # dfs: 먹을 물고기 정하기, d: 물고기와의 거리 global target, min_d # d > min_d라면 걍 return if d >= min_d: return # 먹을 수 있는 물고기 크기 생각해보기 if 0 솔직히 DFS로 풀었을 때 왜 이렇게 되..
'''조건:1. 빨간 구슬과 파란 구슬은 동시에 같은 자리에 있을 수 없음2. 빨간 구슬이 구멍에 => 성공 / 파란 구슬이 구멍에 => 실패3. 최대 10번까지 기울일 수 있음 (그 이상은 -1 출력)4. N: 보드의 세로 크기(행), M: 보드의 가로 크기(열)5. '.': 빈칸, '#': 벽, 'R': 빨간 구슬, 'B': 파란 구슬, 'O': 구멍'''def move(x, y, dx, dy): count = 0 # 구슬이 몇 칸 움직였나? # 다음 위치가 벽이 아니고 + 현재 위치가 구멍이 아닌 경우에만 while board[x+dx][y+dy] != '#' and board[x][y] != 'O': x += dx y += dy co..
def calc(val, idx): global max_ans global min_ans if idx == n: max_ans = max(max_ans, val) min_ans = min(min_ans, val) if operator[0]: val += nums[idx] operator[0] -= 1 calc(val, idx+1) operator[0] += 1 val -= nums[idx] if operator[1]: val -= nums[idx] operator[1] -= 1 calc(val, idx+1) operator[1]..
더보기https://www.acmicpc.net/problem/15686 - 15686. 치킨 배달이번엔 내가 직접 써보면서 공부. 앞서 봤던 기출에 비해 상당히 쉬운 편인 듯. '''1. 치킨집 조합 구하기 (최대 m개)2. 각 치킨집 조합의 좌표들과 가장 가까운 집 사이의 거리 구하기2-1. 각 치킨집 조합 1개씩2-2. 각 조합 내 치킨집 좌표들과 집 사이의 거리 중 최솟값 구하기3. 도시의 치킨 거리 최솟값 구하기'''def make_combination(select_xy, start=0): if len(select_xy) == m: combination.append(select_xy) return for i in range(start, len(chic..
https://www.acmicpc.net/problem/19236 - 19236. 청소년 상어역시 다른 사람이 쓴 코드를 분석해가면서 알고리즘을 익히는 중.import copydef moveFish(fishes, board, shark): # 물고기들의 움직임 for fishNum in sorted(fishes.keys()): x, y, d = fishes[fishNum] for i in range(8): nx = x + dx[(d+i)%8] ny = y + dy[(d+i)%8] # 가고자 하는 곳이 if nx = 4 or ny >= 4: # 범위 벗어남 => 이동 불가 ..
이름 구려DFS도 BFS도 아닌 시뮬레이션 문제. 처음 풀어보는 유형이라 그냥 진짜 부딪쳐 보는 수밖에 없다.다른 사람의 코드를 하나하나 뜯어보면서 어떤 알고리즘인지 학습했다. def move(x, y, d): global answer total = area[x][y] five_percent = int(total*5/100) ten_percent = int(total*10/100) seven_percent = int(total*7/100) one_percent = int(total*1/100) two_percent = int(total*2/100) a_x, a_y = x+dx[d], y+dy[d] # 앞쪽 1칸 b_x, b_y = x-dx[d]..