당연하지만 오늘의 데일리는 쉽게 BFS로 풀 수 있었다.
class Solution:
def maxDistance(self, grid: List[List[int]]) -> int:
n = len(grid)
ans = -1
dx, dy = [-1, 0, 1, 0], [0, 1, 0, -1]
queue = deque()
for i in range(n):
for j in range(n):
if grid[i][j] == 1:
queue.append((i, j))
if len(queue) in [0, n*n]:
return -1
while queue:
x, y = queue.popleft()
ans = min(0, grid[x][y])
for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if 0 <= nx < n and 0 <= ny < n and grid[nx][ny] == 0:
grid[nx][ny] = ans - 1
queue.append((nx, ny))
return -ans
이렇게 풀기만 하면 너무 심심했기 때문에 뭔가를 해보기 위해서
나는 ChatGPT에게 질문을 하기로 한다. (전부 영어로 진행되었으나, 편의상 한글로 번역해서 올려드립니다.)
Q : 어이 친구, 오늘의 데일리 릿코드 문제를 풀어주지 않을래?
A : 나는 2021년까지의 데이터로 트레이닝 되었고, 인터넷이 안 되니까 데일리 릿코드 문제는 몰라
어, 이 친구 인터넷이 안된다고? 그럼 한 번 더 물어봐야지.
Q : 그러면 1162번(=데일리) 문제인 As Far from Land as Possible 을 풀어줄 수 있어?
A : 물론이지. 여기 코드가 있어.
class Solution:
def maxDistance(self, grid: List[List[int]]) -> int:
n, m = len(grid), len(grid[0])
q = deque()
for i in range(n):
for j in range(m):
if grid[i][j] == 1:
q.append((i, j))
if not q or len(q) == n * m:
return -1
dirs = [(0, 1), (0, -1), (1, 0), (-1, 0)]
while q:
x, y = q.popleft()
for dx, dy in dirs:
i, j = x + dx, y + dy
if i >= 0 and i < n and j >= 0 and j < m and grid[i][j] == 0:
grid[i][j] = grid[x][y] + 1
q.append((i, j))
return grid[x][y] - 1
결론적으로 ChatGPT 문제는 특정 릿코드 문제는 잘 풀어주는데 (이거 말고도 실험함)
그건 이미 훈련데이터에 있어서 그랬을 확률이 높고, 어려운 문제는 잘 못 풀더라.
결론만 정리하면
1. 그냥 릿코드의 문제 description만 적어서 내면 적당한 함수를 짜줌
2. 근데 릿코드라는 키워드를 넣는 순간 class Solution을 포함한 릿코드형 코드를 짜줌
3. 어렵지 않은 많은 문제에 대해서 답을 내주는데, 그건 이미 학습되었을 확률이 높음.
4. 코드뿐만 아니라 키 아이디어에 대한 이야기도 요약으로 해줌(예시 : 4번 문제 - 이분 탐색)
이상임. 여기 있는 친구들이 관심이 있을진 모르겠지만 하여간 그렇습니다.
귀찮아서 그런게 아니라 내가 먼저 BFS로 풀고 했음. 이건 믿어라
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.