시뮬레이션25 [백준] 16463번 - 13일의 금요일 [Java] https://www.acmicpc.net/problem/16463 1. 아이디어 13일이 금요일이려면 해당 달의 1일이 일요일이어야 한다.2. 문제풀이 윤년과 윤년이 아닌 년의 각 달의 날짜를 저장한 배열을 사용했고 윤년 여부에 따라 사용할 배열을 먼저 선택했다. 현재 요일은 week 변수에 저장했고 2019년 1월 1일이 화요일인데 일요일을 0, 토요일을 6으로 0 ~ 6까지 번호를 부여해서 현재 요일인 화요일(2)로 초기화했다. 이후 각 년의 각 월에 대해 1일이 일요일이면 개수를 세주고 해당 월의 날짜 수만큼 더한 후 7로 나누어주었다. 이렇게 하면 week는 각 년, 각 월의 1일의 요일이 계속 담기게 된다.3. 코드 import java.io.*;public class Main { /.. 2025. 2. 12. [SWEA] 1954번 - 달팽이 숫자 [Java] https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PobmqAPoDFAUq 1. 아이디어 달팽이의 위치와 방향을 변수로 관리하고 while문과 방향 배열을 조합해서 해결했다.2. 문제풀이 달팽이의 위치와 방향, 달팽이가 적을 숫자를 r, c, d, num 변수로 관리하고 시계 방향으로 방향 배열을 작성했다. 달팽이가 모든 수를 적을 때까지 반복하며 다음 위치가 맵의 밖이거나 숫자가 적힌 칸이면 방향을 변경하도록 했다.3. 코드 import java.io.*;public class Solution { private static final int[] dr = {-1, 0, 1, 0}; private s.. 2025. 2. 12. [백준] 19236번 - 청소년 상어 [Java] https://www.acmicpc.net/problem/19236 1. 아이디어 상어를 배치하고 물고기를 이동시킨 후 상어를 다시 배치하는 과정에서 최적값을 구하는 문제이다. 재귀 함수를 통해 현재 상태에서 다음 상태로 시뮬레이션을 돌려 최적값을 찾는 방식으로 해결할 수 있다.2. 문제풀이 4 * 4 크기의 공간을 두 개 만들어서 하나에는 물고기의 번호, 다른 하나는 물고기의 방향을 저장했다. 물고기의 위치를 바로 알기 위해 Map 자료구조를 활용했고 잡아먹힌 물고기를 체크하기 위해 Set 자료구조도 사용했다.시뮬레이션은 상어를 배치하고 상어가 배치된 칸의 물고기는 잡아먹힌 것으로 처리하고 번호와 방향을 -1로 변경해서 상어가 존재하는 공간임을 표시했다. 이후 1번부터 16번 물고기 중 잡아먹히지 않.. 2025. 2. 12. [백준] 14503번 - 로봇 청소기 [Java] https://www.acmicpc.net/problem/14503 1. 아이디어 반시계 방향 회전을 위해 북서남동 순서로 된 방향 배열을 활용한 무한 루프로 구현했다.2. 문제풀이 입력값의 방향은 시계 방향으로 오름차순으로 주어졌지만 로봇 청소기의 이동은 반시계 방향이어서 입력 단계에서 보정을 먼저 해줬다.이후 무한 루프에서 로봇의 동작 방식에 맞춰 구현하면 됐는데 현재 칸이 청소되지 않은 칸이면 청소한 칸이라는 의미로 2로 채워줬고 현재 방향을 기준으로 반시계 방향으로 90도 회전한 위치부터 청소할 수 있는지 탐색했다. 청소할 수 있으면 다시 무한 루프로 continue 해주고 청소할 수 있는 칸이 없으면 후진이 가능한지 판단하는 방식으로 구현했다.3. 코드 import java.io.*;impor.. 2025. 2. 11. [백준] 16236번 - 아기 상어 [Java] https://www.acmicpc.net/problem/16236 1. 아이디어 우선순위 큐와 BFS를 활용한 시뮬레이션으로 해결할 수 있다.2. 문제풀이 아기 상어와 관련된 정보인 위치와 크기는 static 변수로 관리하며 BFS 알고리즘을 적용했다. 아기 상어의 위치를 입력 받으면 해당 정보로 초기화를 하고 공간에서 아기 상어의 표시인 9를 빈칸인 0으로 변경해서 이후 탐색이 용이하게 했다. 시뮬레이션은 무한 루프에서 BFS를 적용해서 엄마 상어에게 도움을 요청하는 표시인 -1을 반환하면 종료하고 아니면 누적 시간을 더하고 먹은 물고기를 세줬다. 먹은 물고기 수가 아기 상어의 크기와 같아지면 아기 상어의 크기를 키우고 먹은 물고기 수를 0으로 초기화했다. BFS는 아기 상어가 물고기를 먹는 조건이.. 2025. 2. 10. [소프티어] 6275번 - 로봇이 지나간 경로 [Java] https://softeer.ai/practice/6275 1. 아이디어 방문한 곳을 다시 방문하지 않으면서 좌우 회전과 바라보는 방향으로 두 칸 이동하는 로봇의 움직임은 폐곡선을 만들지 않으면서 한붓그리기가 가능한 경로로 움직이게 된다. 따라서 방문한 칸이면서 사방에 방문한 칸이 한칸 밖에 없는 지점 두 개가 가능한 출발지가 된다. 해당 출발지에서 DFS 알고리즘을 통해 위치와 방향을 들고 다니며 명령을 구하는 방식으로 구현했다.2. 문제풀이 입력을 받은 후 시작 위치와 방향을 먼저 찾았다. 맵을 순회하며 방문한 칸일 때 사방에 방문한 칸이 하나밖에 없는 곳이면 시작 위치와 방향을 구한 후 종료했고 이후 해당 정보로 DFS 탐색을 시작했다. DFS는 방문 후 다음 위치를 찾을 때 다음 위치와 현재 .. 2025. 2. 7. [소프티어] 6251번 - 업무 처리 [Java] https://softeer.ai/practice/6251 1. 아이디어 각 직원에 대해 왼쪽 직원한테 받은 업무와 오른쪽 직원한테 받은 업무를 구분해야 한다. 이를 위해 두 개의 Queue를 갖는 노드 클래스를 활용했고 주어진 트리의 루트를 1로 설정한 후 비트마스킹을 활용했다. 업무의 전달은 부서장부터 말단 직원 순으로 진행된다는 점에 주의해야한다.2. 문제풀이 완전이진트리인데 말단 직원과 부서장까지의 올라가는 거리가 같으면 포화이진트리가 된다. 이를 통해 가장 왼쪽 말단 직원의 번호와 가장 오른쪽 말단 직원의 번호를 비트마스킹으로 구해서 변수로 저장했다. 이후 말단 직원에게 업무들을 부여했다. R일까지의 반복은 부서장 일처리 -> 중간 직원 일처리 -> 말단 직원 일처리 순서로 진행되며 역시 비트.. 2025. 2. 6. [백준] 15653번 - 구슬 탈출 4 [Java] https://www.acmicpc.net/problem/15653 1. 아이디어 기존 구슬 탈출 2 문제에서 이제 구슬이 탈출할 수 있을 때까지 시도하고 불가능한 경우면 -1을 출력하는 문제로 dist가 10 초과면 -1d을 출력하던 조건만 없애면 간단하게 해결할 수 있다.([코딩테스트 준비/백준] - [백준] 13460번 - 구슬 탈출 2 [Java])2. 문제풀이 아이디어 그대로 해당 라인만 수정했다.3. 코드 import java.io.*;import java.util.*;public class Main { private static final char[] order = {'U', 'D', 'L', 'R'}; private static class Point { int r;.. 2025. 1. 17. [백준] 15644번 - 구슬 탈출 3 [Java] https://www.acmicpc.net/problem/15644 1. 아이디어 기존 구슬 탈출 2 문제에서 경로에 대한 출력이 추가된 문제로 경로를 기록하는 Queue를 활용해서 해결할 수 있다.([코딩테스트 준비/백준] - [백준] 13460번 - 구슬 탈출 2 [Java])2. 문제풀이 기존 BFS에서 경로를 기록하기 위해 StringBuilder를 담는 Queue를 만들었다. 이후 BFS에서 새 구슬 위치를 추가할 때 새 경로도 같이 넣고 정답 반환 시 경로도 같이 반환하도록 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { private static final char[] order = {'U', 'D', 'L', .. 2025. 1. 17. [백준] 13460번 - 구슬 탈출 2 [Java] https://www.acmicpc.net/problem/13460 1. 아이디어 기존 구슬 탈출 문제에서 횟수에 대한 출력으로 변경된 문제로 동일하게 BFS를 통한 시뮬레이션으로 해결할 수 있다.([코딩테스트 준비/백준] - [백준] 13459번 - 구슬 탈출 [Java])2. 문제풀이 기존 BFS에서 1을 반환하던걸 dist를 반환하고 0 대신 -1을 반환하면 간단하게 해결할 수 있다.3. 코드 import java.io.*;import java.util.*;public class Main { private static final char[] order = {'U', 'D', 'L', 'R'}; private static class Point { int r; in.. 2025. 1. 17. [백준] 13459번 - 구슬 탈출 [Java] https://www.acmicpc.net/problem/13459 1. 아이디어 BFS를 통한 시뮬레이션으로 해결할 수 있다.2. 문제풀이 빨간 구슬, 파란 구슬, 구멍의 위치를 Point 객체에 담아서 관리했다. 객체에 대한 시뮬레이션이라 원본이 변경되지 않는게 중요하다고 생각해서 깊은 복사를 하기도 쉽고 직관적이어서 활용했다.BFS는 Queue에는 빨간 구슬, 파란 구슬을 같이 담고 같이 빼는 방식으로 구현했고 방문 체크는 4차원 배열로 빨간 구슬의 위치와 파란 구슬의 위치를 같이 기록했다. 빨간 구슬의 위치가 일정해도 파란 구슬의 위치가 달라지면 다른 상황이라 같이 기록해야한다.Queue가 빌 때까지 BFS를 진행하는데 두 구슬을 같이 넣었으니 같이 빼서 다루고 빨간 구슬이 구멍에 위치하고 파란.. 2025. 1. 17. [백준] 10811번 - 바구니 뒤집기 [Java] https://www.acmicpc.net/problem/10811 1. 아이디어 구간에 대한 스왑을 반복문으로 구현하면 간단하게 해결할 수 있다.2. 문제풀이 입력으로 주어지는 구간에 대해 스왑 메서드를 만들어서 반복 실행하는 방식으로 구현했다. 스왑은 구간의 양끝 값을 임시 변수를 활용해 교환하면 되는데 이때 구간의 중간에서 멈춰야하는 점에 주의해야한다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(Sy.. 2025. 1. 17. 이전 1 2 3 다음