본문 바로가기

시뮬레이션10

[백준] 15671: 오델로 - JAVA https://www.acmicpc.net/problem/15671 풀이익히 알고있던 오델로 게임을 시뮬레이션하는 문제였다. 예를 들어 `BWWW` 와 같은 줄이 있을 때 오른쪽 끝에 B를 위치한다면 `BWWWB` 처럼 검정 돌이 흰 돌을 감싸 잡아먹게된다. 둘러쌓인 흰 돌이 검정색으로 바뀌게 되고 `BBBBB`가 된다. 검정 돌부터 시작하여 돌을 놓는 좌표가 주어지는데, 돌을 놓을 때 대각선까지 팔방탐색하여 처음 검정 돌을 만나면 이전의 흰 돌들을 검정색으로 바꾸고, 빈칸을 만난다면 패스한다. 최종 보드판의 상태와 검정, 흰 돌중 어느 돌이 많아 승리하는지 구하면 된다.  메모리: 14304KB시간: 104ms언어: Java 11import java.io.*;import java.util.*;publi.. 2024. 8. 13.
[백준] 23747: 와드 - JAVA https://www.acmicpc.net/problem/23747 풀이이 문제는 보드 위에서 이동과 와드 설치를 처리하는 문제로, 주어진 명령에 따라 보드의 상태를 변화시켜야 한다. W 명령을 수행하여 해당 위치와 인접한 같은 타입의 영역을 방문 처리하고, 상하좌우 이동을 통해 요리사의 위치를 업데이트했다. 최종적으로 방문한 위치를 '.'으로 표시하고, 방문하지 않은 위치를 '#'으로 표시하여 결과를 출력했다.  메모리: 127596KB시간: 720ms언어: Java 11import java.io.*;import java.util.*;public class Main { static int r, c; static char[][] board; static boolean[][] result;.. 2024. 6. 10.
[프로그래머스] 카드 짝 맞추기 - JAVA https://school.programmers.co.kr/learn/courses/30/lessons/72415 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이4 X 4 크기의 보드에 카드를 뒤집어 짝을 맞춰서 제거해야 한다. 카드 짝이 맞게 2개씩 위치를 저장해놓았다. 순열을 통해 제거할 카드 번호의 순서를 정해놓았다. 정해놓은 순서대로 제거해서 최소 이동을 계산하여 정답을 갱신했다.  메모리: 74.5MB시간: 1.17ms언어: Java 11import java.util.*;class Solution { static class Node { .. 2024. 5. 18.
[백준] 13335: 트럭 - JAVA https://www.acmicpc.net/problem/13335 풀이n개의 트럭이 길지 w의 다리를 건너는데 1을 가는데 1의 시간이 소요되고 다리가 견딜 수 있는 무게는 L이다. 다리 위에 L넘게 올라갈 수없다. 먼저 간 트럭이 다리를 벗어날 때까지 기다려야한다. 큐에 다리위에 있는 트럭들을 저장하고 sum에 트럭의 무게를 더해줬다. 큐에 넣을 때 다리를 벗어나는 시간까지 같이 넣어주었다. 시간을 늘리면서 큐의 맨 앞에 있는 트럭이 다리를 벗어날 시간이라면 큐에서 삭제, sum에서 무게를 빼주었다. `sum + 다음에 들어올 트럭의 무게`가 L보다 작거나 같으면 큐에 트럭을 넣어주었다.  메모리: 14444KB시간: 136ms언어: Java 11import java.util.*;import java.. 2024. 5. 17.
[백준] 20006: 랭킹전 대기열 - JAVA https://www.acmicpc.net/problem/20006 풀이플레이어의 레벨과 닉네임이 주어진다. 플레이어를 방에 적절하게 배치시켜야 하는데 생성된 방이 없거나 들어갈 방이 없다면 해당 플레이어의 레벨을 기준으로 방을 생성하고, 생성된 방 중에 해당 방의 레벨을 기준으로 -10부터 +10 사이에 플레이어의 레벨이 있다면 방에 입장시킨다. 방의 정원이 꽉 찼으면 더이상 들어갈 수 없다. Node라는 클래스를 만들어 처음 선언될 때 해당 플레이어의 레벨로 초기화해주었고 닉네임 사전순으로 출력하기 위해 TreeMap에 넣어주었다.  메모리: 16396KB시간: 172ms언어: Java 11import java.util.*;import java.io.*;public class Main { sta.. 2024. 5. 17.
[백준] 19238: 스타트 택시 - JAVA https://www.acmicpc.net/problem/19238 풀이빈칸과 벽이 있는 지도가 주어진다. 택시의 시작위치와 승객의 출발지와 도착지가 주어진다. 택시는 한칸 이동할 때 연료 1씩 소모하며, 승객을 태우고 이동하여 목적지에 도달하였다면 승객을 태우고 이동한 만큼의 2배 연료를 획득한다. 이동하는 중에 연료가 다 떨어지면 끝난다. bfs탐색을 통해 택시로부터 승객까지 최소 위치를 구했고, 다시 bfs탐색으로 승객을 목적지까지 이동시켰다. 택시가 승객에 도착하거나, 목적지에 도착했을 때, 연료 체크를 하여 도중에 0이 되었는지 확인했다.  메모리: 22748KB시간: 220ms언어: Java 11import java.util.*;import java.io.*;public class Main {.. 2024. 5. 16.
[백준] 3025: 돌 던지기 - JAVA https://www.acmicpc.net/problem/3025 풀이주어진 조건에 맞게 위에서부터 돌을 떨어뜨려 최종 상태를 출력하는 문제였다. 단순한 구현으로 하나씩 진행하며 문제를 풀었을 때는 시간초과가 발생했다. 시간초과를 해결하기위해 메모이제이션을 해야했다. 처음 돌을 놓는 열 별로 stack을 만들어 돌이 이동하는 경로를 저장했다. 새로운 돌을 던질 때 stack에 경로가 들어있다면 마지막에서부터 진행하면 된다.1. 돌의 아랫칸이 벽으로 막혀있거나 가장 아랫줄이라면, 돌은 그 자리에 그대로 멈춰 있는다.2. 돌의 아랫칸이 비어있다면, 돌은 아랫칸으로 이동한다.3. 돌의 아랫칸에 돌이 있다면, 돌은 다음과 같이 미끄러진다. 1. 만약 돌의 왼쪽 칸과 왼쪽-아래 칸이 비어있다면, 돌은 왼쪽으.. 2024. 5. 14.
[백준] 11559: Puyo Puyo - JAVA https://www.acmicpc.net/problem/11559 풀이같은 색 블럭이 4개 이상 연결되어 있으면 한번에 없어진다. 한 라운드씩 진행하여 없어질 수 있는 블럭이 있으면 1연쇄 늘어나고 다음 라운드로 넘어갔다. 라운드를 넘어가기 전에 블럭들을 없앤 후 밑으로 내려주는 작업도 필요했다. 이차원 배열을 탐색하여 '.'이 아닌 경우 bfs탐색을 진행했다. 상하좌우에 같은 색이 있으면 list에 담고 queue에 넣어 계속했다. list에 담긴 개수가 4이상이면 '.'으로 없애주었다. 이번 라운드에 없어진 블럭이 있으면 내려주는 작업을 해야한다. 내려줄때는 열을 먼저 탐색하여 해당 열의 블럭들을 stack에 담아 아래에서부터 채워줬다.  메모리: 14480KB시간: 128ms언어: Java 11i.. 2024. 5. 13.
[백준] 15683: 감시 - JAVA https://www.acmicpc.net/problem/15683 풀이cctv의 방향을 설정하여 사각지대를 최소로 만들어야 한다. cctv의 종류는 5가지가 있다.  2번 cctv는 방향을 선택할 수 있는 방법이 2가지, 5번 cctv는 1가지였다. 나머지 cctv는 4방향 모두 선택할 수 있다. 입력받으면서 cctv의 위치를 저장했고, 그들의 방향을 저장할 배열을 만들어 각각 어떤 방향을 선택할지 조합을 만들었다. 조합이 완성되면 그 방향에 맞게 빈칸을 채워가면서 체크했다. 처음에 빈칸(0)의 개수를 세어놓고 빈칸을 몇개나 채웠는지를 세어 빼주면 된다.  메모리: 72084KB시간: 304ms언어: Java 11import java.io.*;import java.util.*;public class M.. 2024. 5. 12.
[백준] 2636: 치즈 - JAVA https://www.acmicpc.net/problem/2636 풀이구현 + 그래프탐색문제였다. 공기와 맞닿아있는 치즈는 한 시간이 지나면 녹는다. 치즈 내부에 구멍이 있을 수 있는데 외부 공기와 연결되어있지 않으면 치즈를 녹이지 않는다. 판의 가장자리는 치즈가 놓이지 않으므로 (0,0)은 항상 공기이다. (0,0)부터 시작하여 BFS탐색을 통해 공기면 Quque에 넣어주고, 치즈면 녹인다. ✔️참고 1.static int[] dr = { 1, -1, 0, 0 };static int[] dc = { 0, 0, 1, -1 }; 2.static int[][] vector = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } };사방탐색을 할 때 1번 코드보다 2번 코드로 하는 것.. 2024. 5. 11.