문제요약 나의 코드 및 설명 01 (틀렸습니다) 처음으로 제출한 코드. 예제 출력값이 맞게 나온다고 그냥 제출했다가 틀렸다는 판정 받았다. 지금 보니 하위 dfs 함수 호출 전에 방문 체크를 해두고, 다시 돌아와서는 방문 체크 해제를 안했다. 또한, count 값이 계속 더해지는 것도 이상하다. def dfs(x,y): global count for i in range(4): nx = x + dx[i] ny = y + dy[i] if nx=r: continue else: if alphabet_list[ny][nx] not in v: v.append(alphabet_list[ny][nx]) count += 1 dfs(nx,ny) r, c = map(int, input().split()) # 세로, 가로 a..
문제요약 나의 코드 및 설명 import sys sys.setrecursionlimit(10**6) def dfs(x,y): global cnt #동서남북 네 방향 for i in range(4): nx = x + dx[i] ny = y + dy[i] if nx=n: continue else: #다음 좌표에 음식물 쓰레기가 있고, 아직 방문 안했다면 if board[ny][nx] == 1 and visited[ny][nx] == 0: visited[ny][nx] = 1 #카운트 값 증가 cnt += 1 #다음 좌표에 대한 dfs함수 호출 dfs(nx,ny) n,m,k = map(int, input().split()) #n:세로 / m:가로 / k:쓰레기개수 board = [[0]*m for _ in ra..
문제요약 나의 코드 및 설명 RGB를 012로 변환. 지금 생각해보니 for _ in ("R","G,","B")로 하면 되지 않았을까 싶다. 0,1,2 돌면서 적록색약 아닌 사람 먼저 카운트 그리드 중 R,G(0,1)을 같게 만든다. G,B(1,2) 돌면서 적록색약인 사람 카운트 from collections import deque def bfs(sx,sy,color,v): queue = deque() queue.append((sx,sy)) v[sy][sx] = 1 while queue: x,y = queue.popleft() for i in range(4): nx = x + dx[i] ny = y + dy[i] if nx=n: continue else: if board[ny][nx] == color a..
문제요약 나의 코드 및 설명 import sys from collections import deque def bfs(): global days while queue: x,y,z = queue.popleft() for i in range(6): nx = x + dx[i] ny = y + dy[i] nz = z + dz[i] if nx=h: continue else: #다음 좌표가 아직 익지 않은 토마토(0)이고, 방문하지 않았다면, if board[nz][ny][nx] == 0 and visited[nz][ny][nx] == 0: #토마토가 익는다. board[nz][ny][nx] = 1 #다음 좌표의 방문 테이블 값은 현재 좌표 값 + 1 visited[nz][ny][nx] = visited[z][y][..
문제요약 나의 코드 및 설명 from collections import deque def bfs(): global days while queue: #큐가 빌때까지 반복 수행 x,y = queue.popleft() #동서남북 네 방향으로 토마토가 익을 수 있는지 확인 for i in range(4): nx = x + dx[i] ny = y + dy[i] #전체 박스를 벗어난다면, 지나간다. if nx=n: continue #다음 좌표가 아직 안익은 토마토이고, 방문하지 않았다면 if board[ny][nx] == 0 and visited[ny][nx] == 0: #다음 좌표의 토마토를 익었다고 처리하고 board[ny][nx] = 1 #방문 테이블 값을 1 증가시킨다. visited[ny][nx] = vi..
문제요약 나의 코드 및 설명 string = list(input()) length = len(string) check = ["z"]*length #이렇게 해야지 초기 비교 시 무조건 뒤집은 값으로 갱신됨 for i in range(1,length-1): for j in range(i+1,length): if check > string[:i][::-1] + string[i:j][::-1] + string[j:][::-1]: check = string[:i][::-1] + string[i:j][::-1] + string[j:][::-1] print("".join(map(str,check))) 피드백 처음에는 백트래킹으로 풀려고 했다. 그러나 생각보다 쉽지 않아서 그냥 단순 반복문으로 구현했다. 사전적으로 앞..
문제요약 나의 코드 및 설명 문제에서는 첫 번째 문자열(짧은 문자열)에 두 번째 문자열(긴 문자열)의 길이만큼 문자를 추가해서 비교하는 것처럼 설명했지만 사실은 문자를 추가하지 않고, 긴 문자열을 짧은 문자열만큼 잘라서 비교해보면 된다. (두 문자열의 동일한 인덱스에 해당하는 문자가 다르다면 카운트하고, 카운트한 값 중 최소값을 출력하면 되기 때문이다.) a, b = map(str, input().split()) a_list = list(a) b_list = list(b) #두 문자열 길이의 차이+1번 비교하게 될 것이다. length = len(b_list) - len(a_list) n = 0 ans = len(b_list) while n count: ans = count n += 1 print(ans)
문제요약 나의 코드 및 설명 s = list(input()) r_s = s[::-1] if s == r_s: print(len(s)) else: min_ans = len(s)*2 ans = len(s)*2 for i in range(len(r_s)): #뒤집은 문자열을 하나하나 떼어서 붙여본다. check=s+r_s[i:len(r_s)] #만약 뒤집은 문자열이 오리지날과 일치한다면 팰린드롬이다. if check == check[::-1]: ans = len(check) if min_ans > ans: min_ans = ans print(min_ans) 피드백 문자열 문제 연습하다가 만난 문제. 처음에는 어떻게 문제를 풀까 10분 이상 고민한 것 같다. 그러다가 가장 긴 팰린드롬 문자열이 나오게 될 경우는..