전체 글

Baekjoon/구현

🥇[백준] 3190 뱀 (골드4) / 구현, 큐, 이왜틀 극복

문제요약 나의 코드 및 설명 01 - 질문게시판에 있는 반례 다 통과하는데 틀렸습니다 받음 >> 뱀의 꼬리를 제거할 때 잘못함 전체 그리드 : board[][] 뱀이 있는 좌표 값 : 2 사과가 놓인 좌표 값 : 1 아무것도 없는 좌표 값 : 0 으로 정의하고 문제를 풀었다. 매 초마다 뱀의 움직임을 업데이트하는 move() 함수를 작성하고, 메인 함수 부분의 while문에서 호출하여 뱀이 더 이상 움직일 수 없을 때까지 이동을 반복할 수 있도록 코드를 작성하였다. 예제 입력과 질문게시판 반례를 모두 통과하였지만 계속 틀렸다는 판정을 받았다. 알고보니, 뱀이 방문할 다음 좌표에 아무것도 없는 경우, 다음 좌표를 2로 업데이트하고, 뱀의 꼬리 부분은 0으로 바꿔주어야 하는데 이 부분이 잘못되었다. 처음엔 ..

Baekjoon/구현

🥇[백준] 14891 톱니바퀴 (골드5) / 구현

문제요약 나의 코드 및 설명 톱니바퀴를 시계방향으로 회전시키는 함수 turn_right()와 반시계방향으로 회전시키는 함수 turn_left()를 구현하였다. 기준이 될 톱니바퀴를 입력받고, 왼쪽에 놓인 톱니바퀴들은 idx:6에 영향을 받고, 오른쪽에 놓인 톱니바퀴들은 idx:2에 영향을 받는다. 문제의 조건을 놓치지 않고 따라가면서 모든 톱니바퀴를 탐색하는 방식으로 구현하였다. def turn_right(arr): #시계방향 회전 arr.insert(0,arr.pop()) return def turn_left(arr): #반시계방향 회전 arr.append(arr.pop(0)) return #4개의 톱니바퀴에 대한 상태 저장 gear = [] for _ in range(4): gear.append(li..

Baekjoon/구현

🥇[백준] 14503 로봇 청소기 (골드5) / 구현

문제요약 나의 코드 및 설명 반시계 방향으로 회전시키는 turn_left() 함수를 작성하고, while문을 돌려서 반시계 방향으로 회전 했을 때, 다음 좌표가 청소할 수 있는 좌표라면 방문하고, 그렇지 않다면 회전 카운트(cnt)를 1 증가시킨다. 회전 카운트가 4가 된다면, 동서남북 네 방향을 모두 탐색한 것이므로, 후진할 수 있는지 확인한다. n, m = map(int, input().split()) #n:세로 m:가로 y,x, d = map(int, input().split()) #0:북 1:동 2:남 3:서 board = [] for _ in range(n): board.append(list(map(int, input().split()))) dx = [0,1,0,-1] dy = [-1,0,1,0..

Baekjoon/구현

🥇[백준] 15686 치킨 배달 (골드5) / 구현, 백트래킹

문제요약 나의 코드 및 설명 백트래킹을 활용하여 가능한 m개의 치킨집 좌표 케이스들을 저장하고, 하나씩 탐색하며 최단 치킨거리를 찾는다. #백트래킹으로 폐업시키지 않을 치킨집 구하기 def dfs(count, start, temp_list): if len(temp_list) == m: #m개가 되면, result.append(temp_list) #result에 저장된 리스트 저장 후 리턴 return for i in range(start, len(chicken)): if i not in v: v.append(i) dfs(count+1, i+1, temp_list+[chicken[i]]) v.pop() n, m = map(int, input().split()) board = [list(map(int, in..

Baekjoon/구현

🥇[백준] 11559 Puyo Puyo (골드4) / 구현

문제요약 나의 코드 및 설명 DFS로 연결된 뿌요들의 좌표를 구하고, 4개 이상 연결된 뿌요들을 터뜨리고 나서 공중에 떠있는 뿌요를 아래로 내린다. #연결된 뿌요들의 좌표를 구하는 코드 def dfs(x,y): global color for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0

Baekjoon/구현

🥇[백준] 2638 치즈 (골드3) / 구현, 시간초과 해결, 문제 아이디어

문제요약 나의 코드 및 설명 01 (시간초과) 녹을 치즈가 더이상 없을 때까지 반복을 수행하면서 check_hole() 함수로 내부 공기의 좌표를 구하고, 치즈가 내부 공기 이외의 공기(외부 공기)와 2개 이상 맞닿아 있다면 녹을 예정인 치즈이므로, 리스트 r에 녹을 예정인 치즈의 좌표를 구하는 melt() 함수를 구현하였고, 그리드를 갱신해주도록 소스 코드를 작성했다. 매 반복마다 내부 공기 좌표를 구하는 check_hole() 함수를 통해, 매우 많은 좌표를 중복해서 여러번 탐색하기 때문에 시간 초과가 발생했다. #공기가 치즈 내부에 있는 공기인지 체크 def check_hole(arr): for y in range(n): for x in range(m): cnt = 0 #공기(0)인 좌표 if ar..

Baekjoon/구현

🥇[백준] 16234 인구 이동 (골드5) / 구현, 시간초과 해결

문제요약 나의 코드 및 설명 01 : 77~80%에서 시간초과.. bfs(sx,sy) : 연합 가능한 좌표 탐색하는 bfs 함수이고, 아래의 값들을 구할 수 있다. (sx,sy) 부터 상하좌우로 좌표를 이동하면서 방문한다. 현재의 좌표와 다음 좌표의 나라의 인구 차이가 조건에 부합한다면 방문 처리한다. temp_total : 방문한 좌표의 인구수를 저장하는 변수 temp_cnt : 방문한 좌표의 수를 카운트한다.(하나의 연합을 이루는 나라들의 수가 된다.) check : 연합이 한 번이라도 생성이 되면 check 변수 값을 +1해준다. bfs() 함수의 작성이 끝났다면, 더 이상 연합이 불가능해질 때까지 while문을 통해 반복을 수행한다. 이중 for문을 통해 그리드(board)의 좌표 값(나라)들을 ..

Programmers/Lv2

[프로그래머스] 큰 수 만들기 (Lv2) / 그리디, stack 활용

문제요약 나의 코드 및 설명 (백트래킹) - 당연히 시간초과.. number의 각 자리를 방문하면서 temp_list 라는 임시 테이블에 담는다. temp_list의 길이가 len(num_list)-k 가 된다면, result 리스트에 숫자로 변환한 값을 저장한다. result에 저장된 값중 가장 큰 값을 문자열 형태로 변환 후 출력한다. v = [] def solution(number, k): answer = '' num_list = list(map(int, str(number))) result = [] def dfs(count, start, temp_list): if len(temp_list) == len(num_list) - k: result.append(int("".join(map(str, tem..

hellosonic
꾸준함