본문 바로가기

코딩테스트 문제풀이81

[백준] 14499 주사위 굴리기 백준 14499번 주사위 굴리기 구현 / 시뮬레이션 [문제] [과정] 주사위를 돌릴 때 상,하,좌,우에 따른 주사위 번호 이동 값을 변동해주는 것이 핵심이 됨 나의 경우에는 딕셔너리로 1,2,3,4 값에 따른 초기 주사위배열의 인덱스 변환위치를 저장해서 임의의 주사위를 만들어서 현재 주사위의 인덱스 값을 차례대로 넣은 후 다시 주사위에 임의의 주사위를 대입시키는 방식으로 풀었다. check() 함수 : 칸의 값과 주사위 값을 비교하여 주사위와 칸의 값을 변경해주는 함수 rolling() 함수 : 입력된 방향에 따른 주사위를 굴려주는 함수 [소스코드] # 14499 주사위 굴리기 n,m,x,y,k = map(int,input().split()) arr = [list(map(int, input().split.. 2022. 8. 11.
[백준] 11559 PuyoPuyo 백준 11559번 Puyo Puyo 구현 / 그래프 / 너비우선탐색 / 시뮬레이션 [문제] 2시간 반이 걸린 문제^^ 시뮬레이션 문제가 어렵다는걸 느꼇다. 상하좌우연결을 보고 탐색이 필요할 것 같고 아래로 내려오는 별도의 함수도 구현해야 하겠다는 생각을 할 수 있었다. [과정] 기본적인 로직 : 모든 배열의 자리에서 상하좌우를 비교하고 하나가 터지면 자리를 내리고 계속 비교하는 것 ※ 핵심이 되는 부분 모든 자리에서 bfs를 돌릴 때 4개 이상의 같은 좌표가 있어서 사라지게 되면 바로 내려오는 것이 아니고, 모든 좌표에서 같은 arr배열을 사용해서 bfs를 돌리고 내려오지 않은 상태로 마지막까지 반복하는 것 사라진 좌표는 별도의 배열에 저장하고 arr배열의 해당 좌표값을 . 으로 바꾼 후 좌표가 터진 횟.. 2022. 8. 9.
[백준] 2164 카드2 백준 2164번 카드2 자료구조 / 큐 [문제] [과정] 간단한 큐문제 deque로 선언 후 popleft()로 가장 왼쪽의 원소를 지워주고, 한번더 popleft()후 삭제된 원소를 append()해주면 됨 [소스코드] # 2164 카드2 from collections import deque import sys input = sys.stdin.readline n = int(input()) data = [i for i in range(1,n+1,1)] data = deque(data) for _ in range(n-1): data.popleft() tmp = data.popleft() data.append(tmp) print(data[0]) [통과] 2022. 8. 8.
[백준] 18258 큐2 백준 18258번 큐2 자료구조 / 큐 [문제] [과정] 앞의 10845큐 문제와 같은 내용 입력부분의 명령수가 차이가 나서 시간제한이 차이가 있음 아마 라이브러리를 썻냐 못썻냐 차이인듯 하다 나는 똑같은 소스코드를 넣었는데 통과했다. [소스코드] #18258 큐2 from collections import deque import sys input = sys.stdin.readline q = deque() for i in range(int(input())): data = input().split() if data[0] == 'push': q.append(data[1]) elif data[0] == 'pop': if len(q) == 0: print(-1) else: n = q.popleft() print.. 2022. 8. 8.
[백준] 10845 큐 백준 10845번 큐 자료구조 / 큐 [문제] [과정] 파이썬 라이브러리인 deque를 사용하였음 코드만 작성할경우 시간초과가 생기는데 import sys가 필요함 [소스코드] # 10845 큐 from collections import deque import sys input = sys.stdin.readline q = deque() for i in range(int(input())): data = input().split() if data[0] == 'push': q.append(data[1]) elif data[0] == 'pop': if len(q) == 0: print(-1) else: n = q.popleft() print(n) elif data[0] == 'size': print(len(q).. 2022. 8. 8.
[백준] 1874 스택 수열 [백준] 1874번 스택 수열 자료구조 / 스택 [문제] 스택문제! 처음에 문제 이해가 안됨 나같은 사람이 있나 싶어서 물어보기에 찾아보니 바로 '문제 이해가 안가요..'가 있었음ㅎㅎ 바로 해당 문제 이해하고 문제 풀이를 함 ※ 참고한 다른분의 질문 검색 생각보다 푸는데 1시간10분정도로 오래 걸림 은근 까다로웠음 [과정] 입력값을 저장한 배열(stack)과 현재 저장되고 있는 스택(tmp_stack)의 배열을 선언 스택에 들어가는 숫자(cnt)와 스택과 비교할 스택의 인덱스(idx)를 선언 무한루프 숫자가 n 초과가 되거나 인덱스가 n 이상이 된다면 break 스택(tmp_stack)이 비어있을 때 첫번째 숫자의 경우라면 '+'추가 중간에 스택이 비는 경우라면 cnt를 1증가해주고 '+'추가 conti.. 2022. 7. 18.
[백준] 2573 빙산 백준 2573번 빙산 구현 / 그래프 / 깊이우선탐색 / 너비우선탐색 [문제] 이또한 bfs문제이고 상하좌우를 비교했을 떄 값이 0인지 비교하면 됨 [과정] 3가지 스텝으로 진행하면 된다. 빙산이 두 덩어리이상으로 나누어졌는지 확인 빙산이 전부 녹았는데 두 덩어리로 나누어지지 않은 경우 확인 빙산 녹이기 바깥에 while문을 하나 돌리고 위의 3과정을 순서대로 진행하면서 두 덩어리이상으로 나누어졌을시 반복문을 끝내면 된다. 코드를 보면 알겠지만 빙산을 두 덩어리로 나눈 경우에 bfs를 사용했는데 똑같은 코드를 빙산녹이기에 사용해서 코드가 중복되었다. ※ 주의 빙산 녹이기 부분에서 하나의 좌표에서 상하좌우를 비교해서 녹일때마다 바다를 만나면 만나는 개수를 세서 해당 좌표값을 줄여주어야 한다. 하지만 큐를 .. 2022. 7. 16.
[백준] 2206 벽 부시고 이동하기 [백준] 2206번 벽 부시고 이동하기 그래프 / 너비우선탐색 [문제] 상하좌우로 이동하는 bfs문제 벽을 부시고 이동할 수 있는 경우가 있다는 것이 핵심이 됨. [과정] 문제를 보면 벽을 나중에 뚫는게 이득일 수 도 있고 아닐수 도 있으므로 해당 부분도 고려해야 함 이 문제는 다른 bfs과는 다르게 벽을 통과했는지 통과하지 못했는지의 상태도 같이 저장함 즉 visited에서 기존의 visited[x][y]가 -> visited[x][y][cnt]와 같은 형식으로 수정해야 하는 것! cnt 부분에는 벽을 통과한 상태인지 아닌지를 판별할 수 있도록 0과1로 정의하는 형식으로 진행함 visited에 [0,0]의 형식으로 벽을 부신 상태의 값과 벽을 부시지 않은 상태의 값을 각기 저장 bfs()수행 최종 거리.. 2022. 7. 14.
반응형