From 41647c621e8260a3845a9c7129cd7e4bc19f7d37 Mon Sep 17 00:00:00 2001 From: "YeJun, Jung" Date: Mon, 2 Feb 2026 10:57:02 +0900 Subject: [PATCH 01/12] feat: p87390 solution --- .../programmers/others/p87390/Solution.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 problems/programmers/others/p87390/Solution.java diff --git a/problems/programmers/others/p87390/Solution.java b/problems/programmers/others/p87390/Solution.java new file mode 100644 index 0000000..19cbef0 --- /dev/null +++ b/problems/programmers/others/p87390/Solution.java @@ -0,0 +1,24 @@ +/* + * (87390) n^2 배열 자르기 + * https://school.programmers.co.kr/learn/courses/30/lessons/87390 + */ + +import java.util.Arrays; // for debugging + +public class Solution { + public int[] solution(int n, long left, long right) { + int[] answer = new int[(int)(right - left) + 1]; // right - left < 100000 + int index = 0; + + for (long x = left; x <= right; x++) { + answer[index++] = 1 + Math.max((int)(x / (long)n), (int)(x % (long)n)); + } + + return answer; + } + + public static void main(String[] args) { + System.out.println(Arrays.toString(new Solution().solution(3, 2, 5))); // [3, 2, 2, 3] + System.out.println(Arrays.toString(new Solution().solution(4, 7, 14))); // [4, 3, 3, 3, 4, 4, 4, 4] + } +} From bfdb137d8226023bbb12b93e640c26195f98365d Mon Sep 17 00:00:00 2001 From: "YeJun, Jung" Date: Mon, 2 Feb 2026 11:01:54 +0900 Subject: [PATCH 02/12] docs: change github bot message --- tools/github-bot/message.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tools/github-bot/message.json b/tools/github-bot/message.json index fea7755..13b8eba 100644 --- a/tools/github-bot/message.json +++ b/tools/github-bot/message.json @@ -14,6 +14,13 @@ "type": "list", "message": "[x] $File[1][12:]$ ([$FileName$]($File[2][3:]$))" }, + { + "path": "problems/programmers", + "title": "## 프로그래머스 문제풀이(Java)", + "target": ["\\\\*.java$"], + "type": "list", + "message": "[x] $File[1][11:]$ ([$File[1][4:]$]($File[2][3:]$))" + }, { "path": "notes/", "title": "## 공부노트 추가", From 511bb7553581689c72bc9761c97ff1cc05660cc5 Mon Sep 17 00:00:00 2001 From: "YeJun, Jung" <31740224+yejun614@users.noreply.github.com> Date: Mon, 2 Feb 2026 15:11:43 +0900 Subject: [PATCH 03/12] feat: swea p1226 solution --- problems/SWEA/p1226/Solution.java | 186 ++++++++++++++++++++++++++++++ tools/github-bot/message.json | 7 ++ 2 files changed, 193 insertions(+) create mode 100644 problems/SWEA/p1226/Solution.java diff --git a/problems/SWEA/p1226/Solution.java b/problems/SWEA/p1226/Solution.java new file mode 100644 index 0000000..ebddc30 --- /dev/null +++ b/problems/SWEA/p1226/Solution.java @@ -0,0 +1,186 @@ +/* + * (1226) [S/W 문제해결 기본] 7일차 - 미로1 + * https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14vXUqAGMCFAYD + */ + +package swea.p1226; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.ArrayDeque; +import java.util.Objects; +import java.util.Queue; + +/** + * SW Export Academy - 1226. [S/W 문제해결 기본] 7일차 - 미로1 + * @author YeJun, Jung + * + * @see #main(String[]) + * 1. 입출력을 초기화한다. + * 2. 테스트 케이스를 입력받는다. + * 3. 솔루션을 실행한다. + * + * @see #Solution(int) + * 4. 멤버 변수를 초기화 한다. + * + * @see #solve() + * 5. 입력, 해결, 출력 순서로 실행한다. + * + * @see #input() + * 6. 미로를 저장할 board 배열을 초기화한다. + * 7. 미로를 입력받아 board 배열에 저장한다. + * 7-1. 출발지와 도착지를 발견하면 저장해둔다. + * + * @see #solve() + * 8. 정답 변수 answer를 초기화 한다. + * 9. 좌표를 보관하는 큐를 선언한다. + * 9-1. 큐에 시작 좌표를 추가한다. + * 10. BFS 방식으로 미로를 탐사한다. + * 10-1. 큐의 가장 앞에 있는 요소를 꺼낸다. + * 10-2. 상하좌우 4방향으로 미로를 이동하면서 탐사한다. + * 10-3. 목적지에 도착했다면 정답을 기록하고 탐사를 중단한다. + * 10-4. 길이 존재한다면 큐에 넣는다. + * 10-5. 큐에 넣은 길은 방문 처리 한다. + * + * @see #print() + * 11. 정답을 출력한다. + */ +public class Solution { + static BufferedReader reader; + static BufferedWriter writer; + + public static void main(String[] args) throws IOException { + // 1. 입출력을 초기화한다. + reader = new BufferedReader(new InputStreamReader(System.in)); + writer = new BufferedWriter(new OutputStreamWriter(System.out)); + + final int testCount = 10; + + for (int count = 1; count <= testCount; count++) { + // 2. 테스트 케이스를 입력받는다. + int testCase = Integer.parseInt(reader.readLine().trim()); + + // 3. 솔루션을 실행한다. + Solution solution = new Solution(testCase); + solution.run(); + } + } + + // ---------------------------------------------------------------- + + static final int BOARD_SIZE = 16; + + static final int[] DIR_X = { -1, 1, 0, 0 }; + static final int[] DIR_Y = { 0, 0, -1, 1 }; + static final int DIR_LEN = 4; + + private int testCase; + private int answer; + + private char[][] board; + + private Pos current; + private Pos goal; + + public Solution(int testCase) { + // 4. 멤버 변수를 초기화 한다. + this.testCase = testCase; + } + + public void run() throws IOException { + // 5. 입력, 해결, 출력 순서로 실행한다. + input(); + solve(); + print(); + } + + private void input() throws IOException { + // 6. 미로를 저장할 board 배열을 초기화한다. + board = new char[BOARD_SIZE][0]; + + for (int y = 0; y < BOARD_SIZE; y++) { + // 7. 미로를 입력받아 board 배열에 저장한다. + board[y] = reader.readLine().trim().toCharArray(); + + // 7-1. 출발지와 도착지를 발견하면 저장해둔다. + for (int x = 0; x < BOARD_SIZE; x++) { + if (board[y][x] == '2') { + current = new Pos(x, y); + } else if (board[y][x] == '3') { + goal = new Pos(x, y); + } + } + } + } + + private void solve() { + // 8. 정답 변수 answer를 초기화 한다. + answer = 0; + + // 9. 좌표를 보관하는 큐를 선언한다. + Queue q = new ArrayDeque<>(); + q.offer(current); // 9-1. 큐에 시작 좌표를 추가한다. + + // 10. BFS 방식으로 미로를 탐사한다. + while (!q.isEmpty()) { + // 10-1. 큐의 가장 앞에 있는 요소를 꺼낸다. + Pos peek = q.poll(); + + // 10-2. 상하좌우 4방향으로 미로를 이동하면서 탐사한다. + for (int index = 0; index < DIR_LEN; index++) { + Pos next = new Pos( + peek.x + DIR_X[index], + peek.y + DIR_Y[index] + ); + + if (next.equals(goal)) { + // 10-3. 목적지에 도착했다면 정답을 기록하고 탐사를 중단한다. + answer = 1; + return; + } else if (board[next.y][next.x] == '0') { + // 10-4. 길이 존재한다면 큐에 넣는다. + q.offer(next); + + // 10-5. 큐에 넣은 길은 방문 처리 한다. + board[next.y][next.x] = '1'; + } + } + } + } + + private void print() throws IOException { + // 11. 정답을 출력한다. + writer.write("#" + testCase + " " + answer + "\n"); + writer.flush(); + } +} + +/** + * Pos + * @author YeJun, Jung + * + * 2차원 좌표를 저장하기 위한 클래스, 객체간의 비교가 가능하다. + */ +class Pos { + public int x; + public int y; + + public Pos(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object obj) { + Pos another = (Pos)obj; + return x == another.x && y == another.y; + } + + @Override + public int hashCode() { + return Objects.hash(x, y); + } +} diff --git a/tools/github-bot/message.json b/tools/github-bot/message.json index 13b8eba..a39ae48 100644 --- a/tools/github-bot/message.json +++ b/tools/github-bot/message.json @@ -41,6 +41,13 @@ "target": ["\\\\*.c$", "\\\\*.cpp$", "\\\\*.py$"], "type": "list", "message": "[x] $File[1][12:]$ ([$FileName$]($File[2][3:]$))" + }, + { + "path": "problems/SWEA", + "title": "## ASCODE 문제풀이", + "target": ["\\\\*.java$"], + "type": "list", + "message": "[x] $File[1][11:]$ ([$File[1][4:]$]($File[2][3:]$))" } ] } From e1f2ed02a672bc9be78fc50792629ecbe5e934eb Mon Sep 17 00:00:00 2001 From: "YeJun, Jung" <31740224+yejun614@users.noreply.github.com> Date: Mon, 2 Feb 2026 15:13:49 +0900 Subject: [PATCH 04/12] fix: github bot message --- tools/github-bot/message.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/github-bot/message.json b/tools/github-bot/message.json index a39ae48..f3ff622 100644 --- a/tools/github-bot/message.json +++ b/tools/github-bot/message.json @@ -44,7 +44,7 @@ }, { "path": "problems/SWEA", - "title": "## ASCODE 문제풀이", + "title": "## SW Expert Academy 문제풀이", "target": ["\\\\*.java$"], "type": "list", "message": "[x] $File[1][11:]$ ([$File[1][4:]$]($File[2][3:]$))" From 091f1750d49eb71bf227b8ae34253412648cf694 Mon Sep 17 00:00:00 2001 From: "YeJun, Jung" <31740224+yejun614@users.noreply.github.com> Date: Mon, 2 Feb 2026 15:21:01 +0900 Subject: [PATCH 05/12] fix: add debugging message --- tools/github-bot/main.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/github-bot/main.go b/tools/github-bot/main.go index 0e4b8f2..cce7202 100644 --- a/tools/github-bot/main.go +++ b/tools/github-bot/main.go @@ -243,6 +243,8 @@ func (messages *Messages) GetFileMessages(commitFiles []*github.CommitFile) ([]s } for _, file := range commitFiles { + fmt.Println(" FILE: ", *file.Filename) + data := GetGithubFileRaw(file) str, key := messages.GetSingleFileMessage(file, data) From 9231534bf8c4034c94351d718ba0e8190f339397 Mon Sep 17 00:00:00 2001 From: "YeJun, Jung" <31740224+yejun614@users.noreply.github.com> Date: Mon, 2 Feb 2026 15:23:31 +0900 Subject: [PATCH 06/12] =?UTF-8?q?docs:=20=EC=A3=BC=EC=84=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/SWEA/p1226/Solution.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problems/SWEA/p1226/Solution.java b/problems/SWEA/p1226/Solution.java index ebddc30..0896588 100644 --- a/problems/SWEA/p1226/Solution.java +++ b/problems/SWEA/p1226/Solution.java @@ -26,7 +26,7 @@ * @see #Solution(int) * 4. 멤버 변수를 초기화 한다. * - * @see #solve() + * @see #run() * 5. 입력, 해결, 출력 순서로 실행한다. * * @see #input() From 6fff94014896d816adf8271b8a1d3189da1d386d Mon Sep 17 00:00:00 2001 From: "YeJun, Jung" <31740224+yejun614@users.noreply.github.com> Date: Mon, 2 Feb 2026 15:32:19 +0900 Subject: [PATCH 07/12] add: swea p1228 solution --- problems/SWEA/p1228/Solution.java | 156 ++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 problems/SWEA/p1228/Solution.java diff --git a/problems/SWEA/p1228/Solution.java b/problems/SWEA/p1228/Solution.java new file mode 100644 index 0000000..ca05e45 --- /dev/null +++ b/problems/SWEA/p1228/Solution.java @@ -0,0 +1,156 @@ +/* + * (1228) [S/W 문제해결 기본] 8일차 - 암호문1 + * https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14w-rKAHACFAYD&categoryId=AV14w-rKAHACFAYD&categoryType=CODE&problemTitle=1228&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 + */ + +package swea.p1228; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.ListIterator; +import java.util.StringTokenizer; + +/** + * SW Expert Academy - 1228. [S/W 문제해결 기본] 8일차 - 암호문1 + * @author YeJun. Jung + * + * @see #main(String[]) + * 1. 입출력을 초기화한다. + * 2. 테스트 케이스를 입력받는다. + * 3. 솔루션을 실행한다. + * + * @see #Solution(int) + * 4. 멤버 변수를 초기화 한다. + * + * @see #run() + * 5. 입력, 해결, 출력 순서로 실행한다. + * + * @see #input() + * 6. 원본 암호문의 길이를 originalSize 변수에 저장한다. + * 7. 원본 암호문 내용을 original 배열에 저장한다. + * + * @see #solve() + * 8. 시뮬레이션을 진행할 연결 리스트 memory 객체를 준비한다. + * 9. 원본 암호문 내용을 memory에 올린다. + * 10. 명령어의 개수를 commandSize 변수에 저장한다. + * 11. 한 줄을 입력받아 띄어쓰기를 기준으로 분리한다. + * 12. 명령어에 따라 시뮬레이션을 시작한다. + * 12-1. 명령어를 opcode, index, codeCount로 분리한다. + * 12-2. 버퍼에 삽입할 숫자를 입력한다. + * 12-3. 버퍼 내용을 memory 객체의 index에 삽입한다. + * 13. memory 내용을 iterator로 변환한다. + * 14. 정답으로 출력할 내용의 개수를 계산한다. + * 15. 정답 배열에 memory의 내용을 최대 10개까지 저장한다. + * + * @see #print() + * 16. 정답 배열 내용을 화면에 출력한다. + */ +public class Solution { + static BufferedReader reader; + static BufferedWriter writer; + + public static void main(String[] args) throws IOException { + // 1. 입출력을 초기화한다. + reader = new BufferedReader(new InputStreamReader(System.in)); + writer = new BufferedWriter(new OutputStreamWriter(System.out)); + + final int testCount = 10; + + // 2. 테스트 케이스를 입력받는다. + for (int testCase = 1; testCase <= testCount; testCase++) { + // 3. 솔루션을 실행한다. + Solution solution = new Solution(testCase); + solution.run(); + } + } + + // ---------------------------------------------------------------- + + private int testCase; + private String[] answer; + + private int originalSize; + private String[] original; + + public Solution(int testCase) { + // 4. 멤버 변수를 초기화 한다. + this.testCase = testCase; + } + + public void run() throws IOException { + // 5. 입력, 해결, 출력 순서로 실행한다. + input(); + solve(); + print(); + } + + private void input() throws IOException { + // 6. 원본 암호문의 길이를 originalSize 변수에 저장한다. + originalSize = Integer.parseInt(reader.readLine().trim()); + + // 7. 원본 암호문 내용을 original 배열에 저장한다. + original = new String[originalSize]; + + StringTokenizer inputOrignalTokenizer= new StringTokenizer(reader.readLine().trim()); + for (int index = 0; index < originalSize; index++) { + original[index] = inputOrignalTokenizer.nextToken(); + } + } + + private void solve() throws IOException { + // 8. 시뮬레이션을 진행할 연결 리스트 memory 객체를 준비한다. + LinkedList memory = new LinkedList<>(); + + // 9. 원본 암호문 내용을 memory에 올린다. + for (String code : original) memory.add(code); + + // 10. 명령어의 개수를 commandSize 변수에 저장한다. + int commandSize = Integer.parseInt(reader.readLine().trim()); + // 11. 한 줄을 입력받아 띄어쓰기를 기준으로 분리한다. + StringTokenizer inputCommandTokenizer = new StringTokenizer(reader.readLine().trim()); + + // 12. 명령어에 따라 시뮬레이션을 시작한다. + for (int commandCount = 0; commandCount < commandSize; commandCount++) { + // 12-1. 명령어를 opcode, index, codeCount로 분리한다. + String opcode = inputCommandTokenizer.nextToken(); + int index = Integer.parseInt(inputCommandTokenizer.nextToken()); + int codeCount = Integer.parseInt(inputCommandTokenizer.nextToken()); + + // 12-2. 버퍼에 삽입할 숫자를 입력한다. + String[] buffer = new String[codeCount]; + for (int codeIndex = 0; codeIndex < codeCount; codeIndex++) { + buffer[codeIndex] = inputCommandTokenizer.nextToken(); + } + + // 12-3. 버퍼 내용을 memory 객체의 index에 삽입한다. + memory.addAll(index, Arrays.asList(buffer)); + } + + // 13. memory 내용을 iterator로 변환한다. + ListIterator iterator = memory.listIterator(); + + // 14. 정답으로 출력할 내용의 개수를 계산한다. + final int answerCount = Math.min(10, memory.size()); + answer = new String[answerCount]; + + // 15. 정답 배열에 memory의 내용을 최대 10개까지 저장한다. + for (int index = 0; index < answerCount; index++) { + answer[index] = iterator.next(); + } + } + + private void print() throws IOException { + // 16. 정답 배열 내용을 화면에 출력한다. + writer.write("#" + testCase); + for (int index = 0; index < 10; index++) { + writer.write(" " + answer[index]); + } + writer.write("\n"); + writer.flush(); + } +} From a0a2b2a99017a8c2b1a763471325feb9451d1c1e Mon Sep 17 00:00:00 2001 From: "YeJun, Jung" <31740224+yejun614@users.noreply.github.com> Date: Mon, 2 Feb 2026 15:37:33 +0900 Subject: [PATCH 08/12] swea: p1229 solution --- problems/SWEA/p1229/Solution.java | 160 ++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 problems/SWEA/p1229/Solution.java diff --git a/problems/SWEA/p1229/Solution.java b/problems/SWEA/p1229/Solution.java new file mode 100644 index 0000000..06d02fc --- /dev/null +++ b/problems/SWEA/p1229/Solution.java @@ -0,0 +1,160 @@ +/* + * (1229) [S/W 문제해결 기본] 8일차 - 암호문2 + * https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14yIsqAHYCFAYD&categoryId=AV14yIsqAHYCFAYD&categoryType=CODE&problemTitle=1229&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 + */ + +package swea.p1229; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.StringTokenizer; + +/** + * SW Expert Academy - 1229. [S/W 문제해결 기본] 8일차 - 암호문2 + * @author YeJun. Jung + * + * @see #main(String[]) + * 1. 입출력을 초기화한다. + * 2. 테스트 케이스를 입력받는다. + * 3. 솔루션을 실행한다. + * + * @see #Solution(int) + * 4. 멤버 변수를 초기화 한다. + * + * @see #run() + * 5. 입력, 해결, 출력 순서로 실행한다. + * + * @see #input() + * 6. 원본 암호문의 길이를 originalSize 변수에 저장한다. + * 7. 원본 암호문 내용을 original 배열에 저장한다. + * + * @see #solve() + * 8. 시뮬레이션을 진행할 연결 리스트 memory 객체를 준비한다. + * 9. 원본 암호문 내용을 memory에 올린다. + * 10. 명령어의 개수를 commandLength 변수에 저장한다. + * 11. 한 줄을 입력받아 띄어쓰기를 기준으로 분리한다. + * 12. 명령어에 따라 시뮬레이션을 시작한다. + * 12-1. 명령어를 opcode, index, count로 분리한다. + * 12-2. opcode가 I라면 버퍼를 입력받아 memory객체의 index에 삽입한다. + * 12-3. opcode가 D라면 memory 객체의 index부터 count 개수 만큼 삭제한다. + * 13. memory 내용을 iterator로 변환한다. + * 14. 정답으로 출력할 내용의 개수를 계산한다. + * 15. 정답 배열에 memory의 내용을 최대 10개까지 저장한다. + * + * @see #print() + * 16. 정답 배열 내용을 화면에 출력한다. + */ +public class Solution { + static BufferedReader reader; + static BufferedWriter writer; + + public static void main(String[] args) throws IOException { + // 1. 입출력을 초기화한다. + reader = new BufferedReader(new InputStreamReader(System.in)); + writer = new BufferedWriter(new OutputStreamWriter(System.out)); + + final int testCount = 10; + + // 2. 테스트 케이스를 입력받는다. + for (int testCase = 1; testCase <= testCount; testCase++) { + // 3. 솔루션을 실행한다. + Solution solution = new Solution(testCase); + solution.run(); + } + } + + // -------------------------------------------------------- + + int testCase; + String[] answer; + + int originalSize; + String[] original; + + public Solution(int testCase) { + // 4. 멤버 변수를 초기화 한다. + this.testCase = testCase; + } + + public void run() throws IOException { + // 5. 입력, 해결, 출력 순서로 실행한다. + input(); + solve(); + print(); + } + + private void input() throws IOException { + // 6. 원본 암호문의 길이를 originalSize 변수에 저장한다. + originalSize = Integer.parseInt(reader.readLine().trim()); + + // 7. 원본 암호문 내용을 original 배열에 저장한다. + original = new String[originalSize]; + + StringTokenizer codeTokenizer = new StringTokenizer(reader.readLine().trim()); + for (int index = 0; index < originalSize; index++) { + original[index] = codeTokenizer.nextToken(); + } + } + + private void solve() throws IOException { + // 8. 시뮬레이션을 진행할 연결 리스트 memory 객체를 준비한다. + LinkedList memory = new LinkedList<>(); + + // 9. 원본 암호문 내용을 memory에 올린다. + for (String code : original) memory.add(code); + + // 10. 명령어의 개수를 commandLength 변수에 저장한다. + int commandLength = Integer.parseInt(reader.readLine().trim()); + // 11. 한 줄을 입력받아 띄어쓰기를 기준으로 분리한다. + StringTokenizer commandTokenizer = new StringTokenizer(reader.readLine().trim()); + + // 12. 명령어에 따라 시뮬레이션을 시작한다. + for (int commandIndex = 0; commandIndex < commandLength; commandIndex++) { + // 12-1. 명령어를 opcode, index, count로 분리한다. + String opcode = commandTokenizer.nextToken(); + int index = Integer.parseInt(commandTokenizer.nextToken()); + int count = Integer.parseInt(commandTokenizer.nextToken()); + + if (opcode.equals("I")) { + // 12-2. opcode가 I라면 버퍼를 입력받아 memory객체의 index에 삽입한다. + List buffer = new ArrayList<>(); + for (int current = 0; current < count; current++) { + buffer.add(commandTokenizer.nextToken()); + } + memory.addAll(index, buffer); + } else if (opcode.equals("D")) { + // 12-3. opcode가 D라면 memory 객체의 index부터 count 개수 만큼 삭제한다. + for (int current = 0; current < count; current++) { + memory.remove(index); + } + } + } + + // 13. memory 내용을 iterator로 변환한다. + Iterator iter = memory.iterator(); + + // 14. 정답으로 출력할 내용의 개수를 계산한다. + int answerCount = Math.min(10, memory.size()); + answer = new String[answerCount]; + + // 15. 정답 배열에 memory의 내용을 최대 10개까지 저장한다. + for (int index = 0; index < answerCount; index++) { + answer[index] = iter.next(); + } + } + + private void print() throws IOException { + // 16. 정답 배열 내용을 화면에 출력한다. + writer.write("#" + testCase); + for (String code : answer) writer.write(" " + code); + writer.write("\n"); + writer.flush(); + } +} From cf04f182945515f71f1ea08643a55de22af1d71b Mon Sep 17 00:00:00 2001 From: "YeJun, Jung" <31740224+yejun614@users.noreply.github.com> Date: Mon, 2 Feb 2026 15:44:26 +0900 Subject: [PATCH 09/12] feat: swea p2001 solution --- problems/SWEA/p2001/Solution.java | 135 ++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 problems/SWEA/p2001/Solution.java diff --git a/problems/SWEA/p2001/Solution.java b/problems/SWEA/p2001/Solution.java new file mode 100644 index 0000000..ceb3e4b --- /dev/null +++ b/problems/SWEA/p2001/Solution.java @@ -0,0 +1,135 @@ +/* + * (2001) 파리 퇴치 + * https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PzOCKAigDFAUq&categoryId=AV5PzOCKAigDFAUq&categoryType=CODE&problemTitle=2001&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 + */ + +package swea.p2001; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.StringTokenizer; + +/** + * SW Expert Academy - 2001. 파리 퇴치 + * @author YeJun. Jung + * + * @see #main(String[]) + * 1. 입출력을 초기화한다. + * 2. 테스트 케이스를 입력받는다. + * 3. 솔루션을 실행한다. + * + * @see #Solution(int) + * 4. 멤버 변수를 초기화 한다. + * + * @see #run() + * 5. 입력, 해결, 출력 순서로 실행한다. + * + * @see #input() + * 6. 한줄을 입력받아 띄워쓰기를 기준으로 분리하고 각각 boardSize, cursorSize 변수에 저장한다. + * 7. boardSize를 +1 늘려서 패딩을 추가한다. + * 8. cursorSize를 -1 줄여서 현재 좌표를 기준으로한 크기로 수정한다. + * 9. 파리의 위치 정보를 저장할 board 2차원 배열을 준비한다. + * 10. board 배열을 입력받는다. + * + * @see #solve() + * 11. 누적합 행렬을 만든다. + * 12. 정답 변수인 answer를 초기화 한다. + * 13. board 배열을 순회하면서 가장 큰 부분합을 찾는다. + * + * @see #print() + * 14. 정답 배열 내용을 화면에 출력한다. + */ +public class Solution { + static BufferedReader reader; + static BufferedWriter writer; + + public static void main(String[] args) throws IOException { + // 1. 입출력을 초기화한다. + reader = new BufferedReader(new InputStreamReader(System.in)); + writer = new BufferedWriter(new OutputStreamWriter(System.out)); + + // 2. 테스트 케이스를 입력받는다. + int testCount = Integer.parseInt(reader.readLine().trim()); + + for (int testCase = 1; testCase <= testCount; testCase++) { + // 3. 솔루션을 실행한다. + Solution solution = new Solution(testCase); + solution.run(); + } + } + + // -------------------------------------------------------- + + int testCase; + int answer; + + int boardSize; + int cursorSize; + int[][] board; + + public Solution(int testCase) { + // 4. 멤버 변수를 초기화 한다. + this.testCase = testCase; + } + + public void run() throws IOException { + // 5. 입력, 해결, 출력 순서로 실행한다. + input(); + solve(); + print(); + } + + private void input() throws IOException { + // 6. 한줄을 입력받아 띄워쓰기를 기준으로 분리하고 각각 boardSize, cursorSize 변수에 저장한다. + StringTokenizer line; + line = new StringTokenizer(reader.readLine().trim()); + + boardSize = Integer.parseInt(line.nextToken()); + cursorSize = Integer.parseInt(line.nextToken()); + + boardSize++; // 7. boardSize를 +1 늘려서 패딩을 추가한다. + cursorSize--; // 8. cursorSize를 -1 줄여서 현재 좌표를 기준으로한 크기로 수정한다. + + // 9. 파리의 위치 정보를 저장할 board 2차원 배열을 준비한다. + board = new int[boardSize][boardSize]; + + // 10. board 배열을 입력받는다. + for (int y = 1; y < boardSize; y++) { + line = new StringTokenizer(reader.readLine().trim()); + + for (int x = 1; x < boardSize; x++) { + board[y][x] = Integer.parseInt(line.nextToken()); + } + } + } + + private void solve() { + // 11. 누적합 행렬을 만든다. + for (int y = 1; y < boardSize; y++) + for (int x = 1; x < boardSize; x++) + board[y][x] += board[y - 1][x] + board[y][x - 1] - board[y - 1][x - 1]; + + // 12. 정답 변수인 answer를 초기화 한다. + answer = 0; + + // 13. board 배열을 순회하면서 가장 큰 부분합을 찾는다. + for (int y = 1; y < boardSize - cursorSize; y++) { + for (int x = 1; x < boardSize - cursorSize; x++) { + int current = board[y + cursorSize][x + cursorSize]; + current -= board[y + cursorSize][x - 1] + board[y - 1][x + cursorSize]; + current += board[y - 1][x - 1]; + + answer = Math.max(answer, current); + } + } + } + + private void print() throws IOException { + // 14. 정답 배열 내용을 화면에 출력한다. + writer.write("#" + testCase + " " + answer + "\n"); + writer.flush(); + } +} From b230c488e37d88c3674eef87df2d0590a4ad8b41 Mon Sep 17 00:00:00 2001 From: "YeJun, Jung" Date: Mon, 2 Feb 2026 15:48:28 +0900 Subject: [PATCH 10/12] Revert "fix: github bot message" This reverts commit e1f2ed02a672bc9be78fc50792629ecbe5e934eb. --- tools/github-bot/message.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/github-bot/message.json b/tools/github-bot/message.json index f3ff622..a39ae48 100644 --- a/tools/github-bot/message.json +++ b/tools/github-bot/message.json @@ -44,7 +44,7 @@ }, { "path": "problems/SWEA", - "title": "## SW Expert Academy 문제풀이", + "title": "## ASCODE 문제풀이", "target": ["\\\\*.java$"], "type": "list", "message": "[x] $File[1][11:]$ ([$File[1][4:]$]($File[2][3:]$))" From 01b064dccd976a3a5c8e3342a479054cbaf82f25 Mon Sep 17 00:00:00 2001 From: "YeJun, Jung" Date: Mon, 2 Feb 2026 15:48:36 +0900 Subject: [PATCH 11/12] Revert "fix: add debugging message" This reverts commit 091f1750d49eb71bf227b8ae34253412648cf694. --- tools/github-bot/main.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/tools/github-bot/main.go b/tools/github-bot/main.go index cce7202..0e4b8f2 100644 --- a/tools/github-bot/main.go +++ b/tools/github-bot/main.go @@ -243,8 +243,6 @@ func (messages *Messages) GetFileMessages(commitFiles []*github.CommitFile) ([]s } for _, file := range commitFiles { - fmt.Println(" FILE: ", *file.Filename) - data := GetGithubFileRaw(file) str, key := messages.GetSingleFileMessage(file, data) From bd37a49ca975c1801626183c546674b7d1490103 Mon Sep 17 00:00:00 2001 From: "YeJun, Jung" Date: Mon, 2 Feb 2026 15:49:46 +0900 Subject: [PATCH 12/12] Revert github-bot message.json --- tools/github-bot/message.json | 7 ------- 1 file changed, 7 deletions(-) diff --git a/tools/github-bot/message.json b/tools/github-bot/message.json index a39ae48..13b8eba 100644 --- a/tools/github-bot/message.json +++ b/tools/github-bot/message.json @@ -41,13 +41,6 @@ "target": ["\\\\*.c$", "\\\\*.cpp$", "\\\\*.py$"], "type": "list", "message": "[x] $File[1][12:]$ ([$FileName$]($File[2][3:]$))" - }, - { - "path": "problems/SWEA", - "title": "## ASCODE 문제풀이", - "target": ["\\\\*.java$"], - "type": "list", - "message": "[x] $File[1][11:]$ ([$File[1][4:]$]($File[2][3:]$))" } ] }