본문 바로가기

Algorithm/BOJ

(95)
[BOJ] 14499. 주사위 굴리기 https://www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지 www.acmicpc.net 1. 해결방법 전형적인 시뮬레이션 문제이고, 1시간 정도 걸렸다. 이 문제에서 핵심 포인트는 주사위의 값을 리스트로 미리 초기값을 구하고, 주사위가 굴려질 때마다 동 서 남 북 위 아래의 위치 값을 새로 갱신해주면 된다. dy, dx 동서남북 이동 배열은 문제에서 1, 2, 3, 4가 동서북남이라고 명시되어있으므로, 0번째 인덱스에..
[BOJ] 18808. 스티커 붙이기 https://www.acmicpc.net/problem/18808 18808번: 스티커 붙이기 혜윤이는 최근에 다양한 대회를 참여하면서 노트북에 붙일 수 있는 스티커들을 많이 받았다. 스티커는 아래와 같이 사각 모눈종이 위에 인쇄되어 있으며, 스티커의 각 칸은 상하좌우로 모두 연 www.acmicpc.net 1. 해결방법 일단 시뮬레이션 문제인데, 어려워서 혼자서는 풀지 못하였다. 바킹독님 영상보고 해결 방법에 대해 도움을 받았는데도 4시간이 넘게 걸렸다,,,,,,, 중요한 부분은 1. 노트북에 모눈종이를 비교했을 때, 스티커를 붙일 수 있는지에 대한 체크를 먼저 해야한다. 2. 스티커를 붙이지 못했을 때, 90도 회전을 해야한다.(4번 반복) flag라는 변수를 사용해서 스티커르 붙일 수 있는지에 대..
[BOJ] 15683. 감시 https://www.acmicpc.net/problem/15683 15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감 www.acmicpc.net 1. 해결방법 이 문제는 시뮬레이션 문제이다. 주어진 상황을 차례로 코드로 구현시키면 되고 모든 경우를 찾아봐야 하므로 완전탐색 dfs 재귀를 사용해야 한다. 본인은 생각하지 못한 점인데 direction 각 cctv의 방향을 미리 리스트화 시키는 것이다. 그리고 dy, dx를 통해서 그래프의 상하좌우를 정해준다. direction에 원소 값들과 인덱스 위치 값을 stack에 appen..
[BOJ] 3190. 뱀 https://www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 1. 해결방법 전형적인 시뮬레이션 구현 문제이다. 조건 자체가 있다보니 코드가 조금 길어져서 살짝 헤맸던 코드이다. 그래도 큰 어려움은 없었다. 1. 2차원 배열인 maps에 빈 공간은 0, 사과는 1, 뱀이 있는 곳은 2로 둔다. 2. 방향 정보를 turns 리스트에 정보를 담는다. 3. deque를 이용해서 큐를 만든다. 꼭 deque가 아니고 리스트를 사용하면 됨. 본인은 습관성 deque라서;;;..
[BOJ] 17406. 배열 돌리기 4 https://www.acmicpc.net/problem/17406 17406번: 배열 돌리기 4 크기가 N×M 크기인 배열 A가 있을때, 배열 A의 값은 각 행에 있는 모든 수의 합 중 최솟값을 의미한다. 배열 A가 아래와 같은 경우 1행의 합은 6, 2행의 합은 4, 3행의 합은 15이다. 따라서, 배열 A의 www.acmicpc.net 1. 해결방법 r, c, s에 대한 모든 경우의 수를 2차원 배열에서 회전을 시켜야 하기 때문에 파이썬의 permutations 라이브러리를 사용하였다. 기본적으로 시계방향으로 회전하는 것이기 때문에 상하좌우 모두 값을 이동해주는 코드를 4개의 for문으로 해결하였고, 안 쪽 리스트도 이동해야해서 4개의 for문 위에 바로 s 값이 -1씩 되도록 반복해주었다. 1사이..
[BOJ] 15684. 사다리 조작 https://www.acmicpc.net/problem/15684 15684번: 사다리 조작 사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선 www.acmicpc.net 1. 해결방법 백트래킹 문제인데 개인적으로 정말 어려웠다. 근데 굉장히 좋은 문제로 생각하는데, 그 이유는 2차원 배열을 자유자제로 조절할 수 있어야 사다리 로직을 구상할 수 있고 가지치기를 해서 연산 횟수를 엄청 줄일 수 있다. 아이디어는 유튜브 링크를 남김. 정말 설명을 잘해주신다. https://www.youtube.com/watch?v=s5hmaRJ5jN0 2. 정답코드 (1) 가지치기가..
[BOJ] 1062. 가르침 https://www.acmicpc.net/problem/1062 1062번: 가르침 첫째 줄에 단어의 개수 N과 K가 주어진다. N은 50보다 작거나 같은 자연수이고, K는 26보다 작거나 같은 자연수 또는 0이다. 둘째 줄부터 N개의 줄에 남극 언어의 단어가 주어진다. 단어는 영어 소문 www.acmicpc.net 1. 해결방법 완전탐색 문제이다. 본인은 알파벳을 for문 돌려서 백트래킹을 진행하였다. 처음에는 문제 이해를 잘못해서 몇시간동안 헤맸다... 알파벳 체크 여부인 chk를 만들고, 모든 알파벳을 for문 돌려서 재귀를 호출하는 것이다. 주어진 문자열 하나하나를 따로 보는 것이 아니라, 가르치는 알파벳은 주어진 문자열 모두 공통적으로 적용되는 것이기에 max() 메서드를 사용해서 얼마나 문자..
[BOJ] 1038. 감소하는 수 https://www.acmicpc.net/problem/1038 1038번: 감소하는 수 음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 www.acmicpc.net 1. 해결방법 이 문제는 완전 탐색 백트래킹으로 해결한 문제이다. ( + 조합으로도 해결 ) 처음엔 ''문자열을 시작으로 0부터 9까지의 값을 문자열에 더하면서 answer 리스트에 append 하였다. 재귀를 통해서 계속해서 문자열을 추가시켜 sort() 정렬을 해주면 감소하는 수의 리스트가 만들어진다. 2. 정답코드 (1) 백트래킹 import sys input = sys.std..