https://www.acmicpc.net/problem/19238 문제 탐색하기또 다른 구현 문제를 만났다. 지문이 길긴 하지만 잘 읽어보면 아래와 같은 순서로 구현하면 된다는 것을 알 수 있다.현재 위치에서 최단거리가 가장 짧은 승객을 고른다 (최단 거리가 같을 시, 가장 작은 행 / 가장 작은 열 번호의 승객)해당 위치로 이동 시키고 연료를 소모한다. 이동 중 연료 양을 지속적으로 확인하는 로직을 추가한다.목적지에 도착하면 소모한 연료 양의 두 배를 충전한다.위를 모든 승객을 태울 때까지 반복하고 이후에 남은 연료 양을 출력하면 되는 문제이다. 1번과 같은 경우 매번 최단 거리를 계산 해야하기 때문에 우리는 모든 승객의 좌표가 필요하고, 해당 승객의 탑승 여부 또한 확인해야한다.2번과 같은 경우 b..
https://www.acmicpc.net/problem/2638 문제 탐색하기접근법이 어렵지 않은 구현 문제이다. N * M 모눈종이 위의 치즈가 특정 조건에 따라서 시간마다 사라지는데, 이를 구현하면 된다. 치즈가 사라지는 조건은 아래와 같다.4면 중 2면 이상이 공기 (0)와 맞닿아 있을 때 1시간 후 치즈는 사라진다.위 조건대로 구현하면 되는데 한 가지 생각해봐야 할 것은 치즈 내부에 갇혀 있는 공간은 그저 빈 공간일 뿐 외부 공기로 취급하지 않는 다는 점이다. 매 입력마다 제일 가장자리에 해당하는 부분은 외부 공기로 취급되기 때문에 이를 이용하면 어떤 부분까지가 외부 공기인지 판별할 수 있다. 위의 외부 공기 판별을 bfs를 통해서 매번 찾고 실제로 없어지는 치즈를 찾으면 정답을 받을 수 있을 ..
https://www.acmicpc.net/problem/9019문제 탐색하기비교적 구현이 쉬운 BFS 문제인거 같다. 각 연산을 구현하여 최소 명령어를 구하면 된다. 이 때 BFS 탈출 조건은 더 이상 방문 할 곳이 없을 때 생각해보아야 하는데 시간 제한이 6초로 비교적 넉넉한 것을 보면 연산이 오래 걸리지 않나 생각된다. 이에 따라서 자리 수의 최소인 0부터 9999 까지 방문 할 수 있도록 배열을 구성하고 이에 맞추어 BFS를 구현하면 정답을 받을 수 있을 것 같다. 방법만 떠올리면 빠르게 구현할 수 있는 문제이다. 각 연산은 설명이 어렵게 되어 있지만 잘만 생각해보면 사칙연산에 모듈러만 있으면 구현할 수 있다. 각 연산은 아래 처럼 구현할 수 있다.D : 두배를 하고 9999를 넘는 수가 나오면 ..
https://www.acmicpc.net/problem/23289문제 탐색하기....어제 푼 문제가 어지럽다고 말한걸 취소하고 싶을 정도로 머리가 아득해졌다. 하지만...잘 문제를 살펴보자. 구현 문제는 문제를 똑바로 읽는 거부터 시작하면 된다. 아래 순서대로 구현하면 되는데 각각에 설명이 부족한 부분들이 존재하기에 파악하기 힘들다. 찬찬히 살펴보도록 하자. 먼저 구현해야할 순서는 아래와 같다. 집에 있는 모든 온풍기에서 바람이 한 번 나옴온도가 조절됨온도가 1 이상인 가장 바깥쪽 칸의 온도가 1씩 감소초콜릿을 하나 먹는다.조사하는 모든 칸의 온도가 K 이상이 되었는지 검사. 모든 칸의 온도가 K이상이면 테스트를 중단하고, 아니면 1부터 다시 시작한다.처음에 배열을 잘 설계했다는 가정 하에 사실 구현 ..
https://www.acmicpc.net/problem/17837문제 탐색하기또 다른 구현 문제다. 보자마자 눈이 핑 돈다면 제대로 문제를 읽은게 맞다. 체스판과 말을 활용하여 아래의 규칙을 따르도록 만족하면 된다. 체스판에는 흰색, 빨간색, 파란색으로 칠해져있고 이를 통해서 지켜야할 규칙은 아래와 같다.흰색인 경우 (칸이 0일 때)가장 위에 A번 말을 올려놓는다 (A번 위에 말이 있는 경우 같이 옮긴다.)빨간색의 경우 (칸이 1일 때)가장 위에 A번 말을 올려놓는건 동일하다. (A번 위에 말이 있는 경우 옮긴 후 A번 부터 해당 말의 순서를 뒤집는다.파란색의 경우 (칸이 2일 때)A번 말의 이동 방향을 반대로 하고 한 칸 이동한다. 방향을 반대로 바꾼 후에 이동하려는 칸이 이동하지 않고 가만히 있는다..
문제 탐색하기문제는 가로와 세로 방향으로 길을 지날 수 있는지를 구해야 한다. 경사로가 있거나 높이가 같을 때만 지날 수 있고경사로는 더 낮은 높이의 칸의 길이가 L일 때만 놓을 수 있다.경사로는 겹치거나, 높이 차이가 1이 아니거나 하면 놓을 수 없게 된다위의 조건을 토대로 시간복잡도를 구해보면 결국 모든 칸을 2번씩은 방문해야한다 (가로, 세로) 이를 통하여 시간 복잡도를 구해보면 O(N ^ 2)이 되므로 시간안에 통과할 수 있을 것이다. 코드 설계하기입력을 처리하고 2차원 배열을 통해서 지도의 각 높이를 받아오도록 한다.경사로를 가로와 세로로 나누어 처리한다.가로와 세로 각각에서 아래의 경우에 대한 처리를 코드로 구현한다.높이가 같을 때높이 차이가 1 이상일 때내리막길 / 오르막길 설치모든 가능한 ..