
크로아티아 알파벳(2941) 문제를 문자열 치환과 인덱스 점프 방식 두 가지로 풀이했다. 각 방법의 알고리즘 흐름, 시간·공간 복잡도, 중첩 처리 이슈, 어려웠던 점을 코드와 이미지 예시로 시각화해 상세히 비교 정리했으며, 배운 팁과 코드 스니펫 활용법까지 담았다.

1316 그룹 단어 체커는 문자열을 순회해 연속 등장은 무시하고, 비연속 중복만 검사해 그룹 단어 개수를 센다. 초기 방식(O(NL²)) 대신 boolean[26] 배열과 prev 변수 활용을 통해BufferedReader+StringBuilder I/O 최적화

BOJ 25206 '너의 평점은?' 문제를 풀이: P등급 제외 과목 학점×평점 가중평균 계산. Switch-case vs Map방식 비교. Map.of와 DecimalFormat 활용해 코드 간결·유지보수성 향상, 6소수점 고정 출력, 입력 라인 고정으로 안정성 확보.

2738번 행렬덧셈. 두 개의 N×M 행렬을 입력받아 같은 위치의 원소끼리 더한 결과를 출력하는 문제. 입력을 2N줄 받아 한 배열에 누적 덧셈 처리하며, BufferedReader로 빠른 입력을 사용해 효율성을 높임.

9×9 배열에서 최댓값과 위치를 한 번의 입력 순회로 찾는 문제를 다뤘다. 최댓값과 좌표 갱신, 1-based 인덱스 변환을 for문으로 구현했다. 인덱스 기준 실수와 for문 이외의 대안 가능성을 고찰한 과정, 최적 복잡도와 실전 팁까지 정리했다.

5줄의 문자열을 입력받아, 세로 방향으로 한 글자씩 읽어 한 줄로 출력하는 문제. 1차원 배열 인덱싱, String 배열 인덱스 체크 등 다양한 구현 가능. 입력 크기가 작아 효율성보다는 간결성과 직관성에 중점을 두어야 함.

여러 장의 10×10 색종이를 도화지 위에 겹치게 붙였을 때, 색종이가 붙은 전체 영역의 넓이를 구하는 문제다. 100×100 배열로 겹침을 처리해 중복 없이 카운트하며, 시뮬레이션 구현력이 핵심이다.

입력받은 N진법 수를 10진법으로 변환하는 문제다. Java의 Integer.parseInt(문자열, 진법) 함수를 이용하면 직접 진법 변환 로직 없이 간단하게 풀이할 수 있다. 10~36진법까지 지원하며, 알파벳도 처리된다.

10진법으로 주어진 수를 N진법으로 변환하는 문제. Java 내장 함수(Integer.toString(num, radix))로 간단히 진법 변환 가능하며, 직접 구현 시 나머지 연산과 알파벳 매핑, 역순 출력이 필요하다. 예외적으로 입력 0도 처리해야 한다.

미국 동전으로 주어진 거스름돈을 최소 개수로 나누는 문제. 큰 동전부터 나누는 그리디 방식으로 해결힘. 각 단계 최적 선택이 전체 최적해가 되는 구조(그리디 성립 조건)를 만족한다.

수열에 대한 점화식을 구하면 간단하게 나오는 문제. 2ⁿ+1 공식으로 도형의 한 변 점 개수를 구해 제곱하면 전체 점의 개수가 나온다. 비트 연산자 (1 << n)을 쓰면 Math.pow보다 빠르고 메모리도 적게 사용한다.

벌집 문제는 계차수열 (각 층마다 6의 배수만큼 방이 늘어남) 규칙을 이용해 푸는 문제. 반복문 대신 k = ceil((sqrt(12*(n-1)+9)-3)/6) 공식으로 더 빠르게 최소 이동 횟수를 구할 수 있다.

입력 N에 대해 N번째 분수를 지그재그 대각선 패턴으로 찾아 "X/Y"로 출력하는 문제. 반복문으로 직접 위치를 추적하거나, 삼각수(1+2+…+n) 공식을 활용해 대각선 번호와 위치를 바로 계산하는 두 가지 방법이 있다.

달팽이가 낮에 A, 밤에 B만큼 이동할 때, 마지막 날은 미끄러지지 않으므로 `(V-B)/(A-B)`를 올림하여 일수를 구함. 반복문 없이 수식만으로 계산 가능하며, 복잡한 조건문 대신 간단한 연산으로 해결할 수 있다.

두 자연수 a, b를 입력받아 a가 b의 배수면 "multiple", b가 a의 배수면 "factor", 아니면 "neither"를 출력하는 문제. 입력이 "0 0"이면 종료. char to int와 String to int 변환에 유의.

자연수 n의 약수 중 k번째로 작은 수를 찾는 문제. 1부터 n까지 순회해 약수를 카운트해도 되고, √n까지 약수를 찾아 정렬한 뒤 k번째 값을 출력하면 더 빠르다. 약수는 짝을 이루는 성질을 활용하면 효율적이다.

n의 약수를 구해 합이 n과 같으면 n = 약수1 + ...로, 아니면 n is NOT perfect.로 출력하는 문제. 단순 반복과 sqrt 최적화 두 가지 방식으로 구현했고, StringBuilder 재사용 및 StringJoiner 활용으로 성능을 높였다.

1000 이하의 수 N개에 대한 소수 찾기 문제. 제곱근 판별법과 에라토스테네스의 체 두 가지 방식으로 해결가능하다. 반복문 한계값을 변경할 때 발생하는 오류를 피하기 위해서는 변수를 분리하거나 final을 활용해 상수로 지정하는 것이 필요하다.

주어진 M~N 범위 내 소수를 에라토스테네스의 체로 판별해 배열에 기록하고, 2부터 √N까지만 체 실행하여 합과 최솟값을 계산하는 문제. 소수가 없으면 -1 출력하며, 시간 복잡도는 O(N log log N), M<2일 땐 2부터 시작한다.

소인수분해 문제. 처음에는 2부터 n까지 나눠 출력해서 접근 (O(N)) → 이후에는 √n까지만 while로 나눠 남은 n > 1이면 출력(O(√N)), 공간 O(1). i=1 재설정 대신 while로 중복 인수 제거.

직사각형의 넓이를 구하는 간단한 문제. 두 정수 A, B를 입력받아 A×B를 출력한다. 입력은 BufferedReader, 출력은 System.out.print() 사용.

(x, y)에서 직사각형의 경계선까지 최소 거리를 구하는 문제. 네 방향(좌, 우, 상, 하) 중 가장 짧은 거리를 Math.min()으로 계산한다.

[네 번째 점 문제는 직사각형 성질을 활용해, x와 y 좌표 중 한 번만 등장한 값을 찾아 네 번째 점을 구한다. 처음에는 중첩 if문으로 접근했으나 논리 흐름의 명료성 및 가독성 면에서 한계가 있었고, XOR이나 HashMap으로 간단히 해결 가능했다.

입력된 정수 n에 대해 도형 둘레는 항상 n×4임을 이용해 정답을 계산한다. int 오버플로를 방지하기 위해 long 타입을 사용해야 한다.

N개의 좌표 중 최소/최대 x, y값을 찾아 가장 작은 직사각형을 구성한 뒤 넓이를 계산한다. 단, 점이 하나일 경우 넓이는 0이다. ChatGPT에게 묻기

세 각을 입력받아 삼각형의 종류를 판별하는 문제다. 각의 합이 180이 아니면 "Error", 모두 같으면 "Equilateral", 두 각만 같으면 "Isosceles", 모두 다르면 "Scalene"을 출력한다.

난이도: ★★☆☆☆ • solved on: 2025-10-01문제 유형: 연결 리스트(Linked List), 포인터 조작요구사항: 단일 연결 리스트의 노드 순서를 역순으로 뒤집어 새로운 head를 반환해야 한다.

문자열 s에서 길이 k의 모든 연속 부분 문자열을 추출해 사전순으로 가장 작은(smallest)과 큰(largest) 문자열을 찾는 문제. substring(i, i+k)과 compareTo()로 비교하며 효율적으로 해결.

`ArrayList<ArrayList<Integer>>`로 중첩 리스트를 구성해 입력 데이터를 저장하고, 쿼리(x, y)에 따라 요소를 출력하는 문제. 인덱스 초과 시 “ERROR!” 출력.

Java 제네릭을 이용해 배열의 모든 요소를 출력하는 printArray() 메서드를 구현하는 문제였다. Integer와 String 등 다양한 타입을 하나의 메서드로 처리하기 위해 제네릭의 개념을 이해하는 것이 핵심이었다.

난이도: ★★☆☆☆ • solved on: 2025-11-05문제 유형: Iterator, 자료형 검사요구사항: Iterator를 이용해 리스트를 순회하면서, 문자열(String)인 원소만 출력해야 한다.자료구조Iterator — 컬렉션의 요소를 순차적으로 접근할 있다

연결 리스트의 특정 위치에 노드를 삽입하는 문제로, 포인터 이동과 참조 연결 구조를 이해하는 것이 핵심이었다.

단일 연결 리스트에서 주어진 위치의 노드를 삭제하는 문제. 0번 인덱스 예외 처리가 핵심이며, 삭제는 값 제거가 아닌 포인터 재연결로 수행해야 함.

두 단일 연결 리스트의 각 노드 데이터를 순차 비교하며 값이 다르거나 한쪽만 끝나면 false, 모두 일치하며 동시에 끝나면 true를 반환하는 문제.

정렬된 두 연결 리스트를 병합하는 문제로, ① ArrayList에 모두 담아 정렬 후 새 리스트 생성(O(NlogN)), ② 투 포인터로 직접 병합(O(N)) 두 가지 방법이 있다. 두 번째 방식이 더 효율적이다.

난이도: ★☆☆☆☆ • solved on: 2025-11-08 문제 유형: Linked List (이중 연결 리스트)요구사항: 정렬된 이중 연결 리스트(Doubly Linked List)에 주어진 데이터를 삽입해, 정렬 순서가 유지되도록 새 노드를 추가해야 한다.

난이도: ★★★☆☆ • solved on: 2025-11-08문제 유형: Stack, 자료구조요구사항:주어진 명령어 목록에 따라 스택을 조작하고, 명령어 3이 주어질 때마다 스택 내 최댓값을 출력해야 한다.

난이도: ★★☆☆☆ • solved on: 2025-11-17 문제 유형: 스택(Stack), 문자열 처리 요구사항: 문자열 내 괄호들이 모두 올바르게 짝을 이루는지 판단해야 한다.

난이도: ★★☆☆☆ • solved on: 2025-11-17 문제 유형: 스택 시뮬레이션, 구현 요구사항: 세 개의 스택에서 top 요소를 제거해 세 스택의 높이가 동일해질 수 있는 최대 높이를 구해야 한다.

난이도: ★★★☆☆ • solved on: 2025-11-17문제 유형: 슬라이딩 윈도우, 자료구조(Deque, HashMap)요구사항:크기 m의 연속된 부분 배열(subarray) 중에서 서로 다른 숫자의 개수(distinct count)가 최대가 되는 값 구하기

[Queue] Circular Array Rotation > 난이도: ★☆☆☆☆ • solved on: 2025-11-17 문제 요약 문제 유형: 배열 회전, 인덱스 변환

난이도: ★☆☆☆☆ • solved on: 2025-11-21문제 유형: 스택(Stack), 큐(Queue), 시뮬레이션요구사항: 두 개의 스택만 이용해 큐의 기능(삽입, 삭제, 조회)을 구현해야 한다.자료구조Queue (자바 기본 자료구조)Stack (문제 의도)

난이도: ★☆☆☆☆ • solved on: 2025-11-21문제 유형: 자료구조(Queue, Stack), 문자열 검사요구사항:주어진 문자열이 palindrome(회문)인지 확인하기 위해Stack에는 앞에서부터 문자 push, Queue에는 뒤에서부터 문자 enque

난이도: ★☆☆☆☆ • solved on: 2025-11-21문제 유형: 재귀(Recursion), 수학, DP 기초요구사항:정수 n이 주어질 때, n번째 피보나치 수(F(n))를 계산한다.

난이도: ★★★☆☆ • solved on: 2025-11-21문제 유형: 재귀(recursion), 문자열 처리, 수학요구사항: 문자열로 주어진 큰 수 n을 각 자릿수 합으로 줄여 단일 자릿수(super digit)로 만든다.

난이도: ★★★☆☆ • solved on: 2025-12-02문제 유형: DFS, 백트래킹, 재귀요구사항: X를 N제곱수들의 합으로 나타내는 모든 고유 조합(unique combinations) 개수를 구해야 한다