전체 글
-
[백준][G4] 13913 - 숨바꼭질4 Java 문제풀이알고리즘/백준(Java) 2025. 10. 21. 12:16
안녕하세요 오늘은 백준 13913번 '숨바꼭질 4' 문제 풀이를 공유하려고 합니다. 1. 문제 분석 및 접근법 목표: 수빈이(N)가 동생(K)을 찾는 가장 빠른 시간과 그 경로를 구해야 합니다.이동 방법:걷기: 1초 후에 X-1 또는 X+1로 이동순간이동: 1초 후에 2*X로 이동핵심 아이디어:최단 시간: 모든 이동 방법이 1초라는 동일한 '비용'을 가집니다. 이렇게 간선의 가중치가 1로 동일한 그래프에서 최단 거리를 찾을 때는 BFS가 가장 효율적이고 정석적인 해법입니다. BFS는 시작점으로부터 거리가 가까운 순서대로 탐색하기 때문에, 목표 지점(K)에 도달하는 순간이 곧 최단 시간임을 보장합니다.경로 추적: 최단 시간을 찾는 과정에서 "내가 어디서부터 왔는지"를 기록해야 합니다. 예를 들어, 5에서 ..
-
[백준][S4] 11866 - 요세푸스 문제 0 Java 문제풀이알고리즘/백준(Java) 2025. 10. 16. 17:29
요세푸스 문제 0 Java 문제풀이원형으로 앉아 사람을 제거해나가는 이 문제는 큐(Queue) 자료구조의 원리를 이해하고 활용하기에 좋은 문제 문제 분석N명의 사람이 원을 이루어 앉아 있고, K라는 숫자가 주어집니다. 1번 사람부터 순서대로 K번째 사람을 제거합니다.한 사람이 제거되면 남은 사람들로 다시 원을 만들어, 방금 제거된 사람의 다음 사람부터 다시 K번째 사람을 제거하는 과정을 반복합니다.이 과정을 N명의 사람이 모두 제거될 때까지 계속하고, 제거되는 사람의 순서를 출력하는 문제입니다. 예를 들어 (7, 3)이 주어지면,1, 2, 3, 4, 5, 6, 7 중에서 3번째인 3을 제거합니다. (남은 사람: 4, 5, 6, 7, 1, 2)4, 5, 6, 7, 1, 2 중에서 3번째인 6을 제거합니다...
-
[백준][S3] 15649 - N과 M (1)알고리즘/백준(Java) 2025. 9. 21. 17:50
안녕하세요 오늘은 "백트래킹"의 기본으로 불리는 백준(BOJ) 15649번 'N과 M (1)' 문제 풀이를 공유하려 합니다. 이 문제는 순열(Permutation)을 생성하는 가장 기본적인 방법을 배울 수 있어,알고리즘 공부를 시작하는 분이라면 꼭 한 번쯤 풀어보셔야 할 문제입니다. 1. 문제 풀이 아이디어문제 요약: 1부터 N까지의 자연수 중에서 중복 없이 M개를 고른 수열을 모두 출력하라. (사전 순으로) 여기서 핵심 키워드는 중복 없이와 수열(순서가 중요하다는 뜻)입니다.예를 들어 N=4, M=2라면, (1, 2)와 (2, 1)은 서로 다른 경우입니다. (1, 1)과 같은 경우는 불가능합니다. (중복 없이)이 문제를 풀기 위한 아이디어는 간단합니다. "갈 수 있는 모든 경로를 하나씩 다 탐색해 보..
-
[백준][S4] 10828 - 스택 문제풀이알고리즘/백준(Java) 2025. 9. 17. 22:34
안녕하세요 백준 [10828 - 스택] 문제는 스택의 5가지 기본 연산(push, pop, size, empty, top)을 구현하면 풀 수 있는 문제입니다. 1. 문제 접근 및 핵심 아이디어이 문제는 스택이라는 자료구조의 LIFO(Last-In, First-Out) 특성을 정확히 이해하고 구현하는 것이 핵심입니다.자료구조 선택: Java에서는 java.util.Stack이라는 클래스를 기본으로 제공합니다. 이 클래스에는 문제에서 요구하는 push(), pop(), size(), isEmpty(), peek() (문제의 top에 해당) 메소드가 모두 구현되어 있어, 이를 활용하는 것이 가장 효율적이라고 판단했습니다.핵심 과제: 스택 자료구조 자체의 로직보다는, N개의 명령어를 효율적으로 입력받고, 각 ..
-
[백준][S1] 2178 - 미로탐색 Java 문제풀이알고리즘/백준(Java) 2025. 9. 12. 17:53
[백준 2178] 미로 탐색 Java 풀이 (BFS 최단 경로 탐색) 안녕하세요~오늘은 그래프 탐색의 가장 대표적인 문제 중 하나인 백준 2178번 '미로 탐색' 문제를 Java로 풀어본 과정을 공유하고자 합니다.이 문제는 너비 우선 탐색(BFS)의 기본적인 원리를 이해하고 적용하기에 매우 좋은 문제입니다.1. 문제 분석입력: N x M 크기의 미로가 주어집니다. '1'은 이동할 수 있는 칸, '0'은 이동할 수 없는 벽을 의미합니다.목표: (1, 1) 위치에서 출발하여 (N, M) 위치까지 도달하는 데 지나야 하는 최소 칸 수를 구해야 합니다.이동 조건: 상, 하, 좌, 우로 인접한 칸으로만 이동할 수 있습니다.핵심 키워드: '최소 칸 수'. 이 키워드는 최단 경로(Shortest Path)를 찾는 문..
-
[백준][B3] 10872 - 팩토리얼 Java 문제풀이알고리즘/백준(Java) 2025. 9. 4. 19:43
안녕하세요! 오늘은 알고리즘 문제 풀이의 가장 기초적인 개념 중 하나인 팩토리얼(Factorial)을 계산하는 백준 10872번 문제에 대해 깊이 있게 다뤄보겠습니다.재귀(Recursion)의 개념을 이해하고 적용하는 데 아주 좋은 문제입니다.1. 문제 분석 🧐먼저 문제의 요구사항을 명확히 파악하는 것이 중요합니다.문제: 정수 N (0 ≤ N ≤ 12)이 주어졌을 때, N!을 계산하는 프로그램을 작성하시오.입력: 첫째 줄에 정수 N이 주어진다.출력: 첫째 줄에 N!을 출력한다.핵심 요구사항:팩토리얼(N) 계산: 팩토리얼은 1부터 N까지의 모든 양의 정수를 곱한 값입니다. 수학적으로는 다음과 같이 정의됩니다.N!=N×(N−1)×(N−2)×⋯×2×1특별한 경우: 수학적 정의에 따라 $0!$은 1입니다. 이..
-
[SWEA][D3] 7102 - 준홍이의 카드놀이 Java 문제풀이알고리즘/Swea(Java) 2025. 8. 31. 17:57
풀이의도 및 방법두 개의 카드 덱(1~N, 1~M)이 주어졌을 때, 각 덱에서 카드를 하나씩 뽑아 더했을 때 나올 수 있는 합계 중 가장 확률이 높은(가장 자주 나오는) 합계를 오름차순으로 출력하는 문제입니다.저는 이 문제를 전체 탐색(Brute-force) 방식으로 접근하여 해결했습니다. 모든 합계 계산하기먼저 1부터 N, 1부터 M까지의 숫자를 이중 for문으로 순회하며 만들 수 있는 모든 합의 경우의 수를 구합니다.계산된 모든 합계를 ArrayList에 저장합니다.최빈값(가장 자주 나오는 합계) 찾기합계들이 저장된 ArrayList를 sort() 메서드를 이용해 오름차순으로 정렬합니다. 이렇게 하면 같은 숫자끼리 뭉쳐있게 되어 빈도를 세기 수월해집니다.정렬된 리스트를 순회하며 현재 숫자의 등장 횟수..
-
[SWEA][D4] 1224 - 계산기3 Java 문제풀이알고리즘/Swea(Java) 2025. 8. 9. 18:10
[1] 문제 설명 및 접근 방식[SWEA 1224] 계산기3 문제는 괄호, 덧셈(+), 곱셈(*)으로 이루어진 중위 표기식을 계산하는 문제입니다.컴퓨터는 우리가 사용하는 중위 표기식(피연산자 사이에 연산자가 있는 형식)을 바로 계산하기 어렵기 때문에, **후위 표기식(연산자가 피연산자 뒤에 오는 형식)**으로 변환하여 계산하는 것이 일반적인 해결책입니다.이를 위해 *스택(Stack)*이라는 자료구조를 활용합니다. 문제 해결은 크게 두 단계로 나뉩니다.중위 표기식을 후위 표기식으로 변환: 연산자 우선순위와 괄호를 고려하여 식의 순서를 재배열.후위 표기식 계산: 변환된 식을 스택을 이용해 최종 결과값을 도출. [2] 1단계: 중위 표기식 -> 후위 표기식 변환 (Shunting-yard algorithm)이..