From ad721e574a6484bcd3a867be3bf9361664384c76 Mon Sep 17 00:00:00 2001 From: baexxbin Date: 2025年2月20日 22:24:29 +0900 Subject: [PATCH 1/6] =?UTF-8?q?[=EB=B0=B0=EC=88=98=EB=B9=88]=201135=20?= =?UTF-8?q?=EB=89=B4=EC=8A=A4=20=EC=A0=84=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "BOJ/1000-5000353円262円210円/SB_1135.java" | 44 ++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 "BOJ/1000-5000353円262円210円/SB_1135.java" diff --git "a/BOJ/1000-5000353円262円210円/SB_1135.java" "b/BOJ/1000-5000353円262円210円/SB_1135.java" new file mode 100644 index 00000000..02d91c7e --- /dev/null +++ "b/BOJ/1000-5000353円262円210円/SB_1135.java" @@ -0,0 +1,44 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.*; + +public class SB_1135 { + static int N; + static List> underling = new ArrayList(); + + private static int call(int node) { + ArrayList lst = new ArrayList(); + + if (underling.get(node).isEmpty()) { // 리프노드면 0반환 + return 0; + } + + for (int ud : underling.get(node)) { + lst.add(call(ud)); // 각 부하들의 전화단계 구하기 + } + + lst.sort(Collections.reverseOrder()); + for (int i = 0; i < lst.size(); i++) { + lst.set(i, lst.get(i) + i + 1); + } + + return Collections.max(lst); + } + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + N = Integer.parseInt(br.readLine()); + for (int i = 0; i < N; i++) { + underling.add(new ArrayList()); + } + + StringTokenizer st = new StringTokenizer(br.readLine()); + for (int i = 0; i < N; i++) { + int boss = Integer.parseInt(st.nextToken()); + if (boss==-1) continue; + underling.get(boss).add(i); + } + + System.out.println(call(0)); + } +} From 5a90b2eb37b115356f40d5feed6214ad391a6f5f Mon Sep 17 00:00:00 2001 From: baexxbin Date: 2025年2月20日 22:29:30 +0900 Subject: [PATCH 2/6] =?UTF-8?q?[=EB=B0=B0=EC=88=98=EB=B9=88]=20389479=20?= =?UTF-8?q?=EC=84=9C=EB=B2=84=20=EC=A6=9D=EC=84=A4=20=ED=9A=9F=EC=88=98=5F?= =?UTF-8?q?250220?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Programmers/Level2/SB_389479.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Programmers/Level2/SB_389479.java diff --git a/Programmers/Level2/SB_389479.java b/Programmers/Level2/SB_389479.java new file mode 100644 index 00000000..096ca022 --- /dev/null +++ b/Programmers/Level2/SB_389479.java @@ -0,0 +1,21 @@ +class Solution { + public int solution(int[] players, int m, int k) { + int[] servers = new int[24]; + int cnt = 0; + + for (int cur = 0; cur < 24; cur++) { + if (players[cur] / m> servers[cur]) { + int need = (players[cur] / m) - servers[cur]; + + // k시간 동안 서버 증설 + for (int i = 0; i < k; i++) { + if (cur + i < 24) { + servers[cur+i] += need; + } + } + cnt += need; + } + } + return cnt; + } +} \ No newline at end of file From 593bb55101630db894b46faca95e037b15e06d7b Mon Sep 17 00:00:00 2001 From: baexxbin Date: 2025年2月21日 22:50:34 +0900 Subject: [PATCH 3/6] =?UTF-8?q?=EB=B0=B0=EC=88=98=EB=B9=88:=20[BOJ]=201450?= =?UTF-8?q?=20=EB=83=85=EC=83=89=EB=AC=B8=EC=A0=9C=5F250221?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "BOJ/1000-5000353円262円210円/SB_1450.java" | 76 ++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 "BOJ/1000-5000353円262円210円/SB_1450.java" diff --git "a/BOJ/1000-5000353円262円210円/SB_1450.java" "b/BOJ/1000-5000353円262円210円/SB_1450.java" new file mode 100644 index 00000000..1aec719a --- /dev/null +++ "b/BOJ/1000-5000353円262円210円/SB_1450.java" @@ -0,0 +1,76 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.StringTokenizer; + +public class SB_1450 { + static int N, C; + static int[] weigth; + static List sbLst = new ArrayList(); + static int ans = 0; + + private static int find(long x) { // upper-bound + int left = 0; + int right = sbLst.size(); + + while (left < right) { + int mid = (left + right) / 2; + if (sbLst.get(mid) <= x) left = mid + 1; + else right = mid; + } + return right; + } + + + private static void findSubSum(int depth, long sm) { + if (depth> N-1) { + ans += find(C-sm); // C-현재값 보다 작거나 같은 수 개수 찾기 + return; + } + + findSubSum(depth + 1, sm); + if (sm + weigth[depth] <= C) { + findSubSum(depth + 1, sm + weigth[depth]); + } + } + + private static void subSum(int depth, long sm) { + if (depth>= (N / 2)) { // 첫번째 그룹은 N/2의 값까지 포함되어야 함 + sbLst.add(sm); + return; + } + // 현재 원소 포함 + subSum(depth + 1, sm); + + // 현재 원소 미포함 + if (sm + weigth[depth] <= C) { + subSum(depth + 1, sm + weigth[depth]); + } + } + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + C = Integer.parseInt(st.nextToken()); + + weigth = new int[N]; + st = new StringTokenizer(br.readLine()); + for (int i = 0; i < N; i++) { + weigth[i] = Integer.parseInt(st.nextToken()); + } + + // 첫번째 그룹에서 만들 수 있는 모든 부분집합 합 만들기 + subSum(0, 0); + Collections.sort(sbLst); + + // 두번째 그룹에서도 만들 수 있는 모든 부분집합 합을 만들고, 위에서 만든 리스트에 C-x했을때 작거나 같은 값 수 찾기(이분탐색) + findSubSum(N / 2, 0); + + System.out.println(ans); + } + +} From 93bed939bfeb80c0db2db7e401dacae1400a9009 Mon Sep 17 00:00:00 2001 From: baexxbin Date: 2025年2月21日 22:53:21 +0900 Subject: [PATCH 4/6] =?UTF-8?q?=EB=B0=B0=EC=88=98=EB=B9=88:=20[SQL]=20?= =?UTF-8?q?=EB=AC=BC=EA=B3=A0=EA=B8=B0=20=EC=A2=85=EB=A5=98=20=EB=B3=84=20?= =?UTF-8?q?=EB=8C=80=EC=96=B4=20=EC=B0=BE=EA=B8=B0=5F250220?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...354円226円264円 354円260円276円352円270円260円.sql" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 "SQL/23354円243円274円354円260円250円/SB_353円254円274円352円263円240円352円270円260円 354円242円205円353円245円230円 353円263円204円 353円214円200円354円226円264円 354円260円276円352円270円260円.sql" diff --git "a/SQL/23354円243円274円354円260円250円/SB_353円254円274円352円263円240円352円270円260円 354円242円205円353円245円230円 353円263円204円 353円214円200円354円226円264円 354円260円276円352円270円260円.sql" "b/SQL/23354円243円274円354円260円250円/SB_353円254円274円352円263円240円352円270円260円 354円242円205円353円245円230円 353円263円204円 353円214円200円354円226円264円 354円260円276円352円270円260円.sql" new file mode 100644 index 00000000..de81bdaa --- /dev/null +++ "b/SQL/23354円243円274円354円260円250円/SB_353円254円274円352円263円240円352円270円260円 354円242円205円353円245円230円 353円263円204円 353円214円200円354円226円264円 354円260円276円352円270円260円.sql" @@ -0,0 +1,23 @@ +-- WHERE절 사용 코드 +SELECT I.ID, N.FISH_NAME, I.LENGTH +FROM FISH_INFO I +JOIN FISH_NAME_INFO N ON I.FISH_TYPE = N.FISH_TYPE +WHERE (I.FISH_TYPE, I.LENGTH) IN ( + SELECT FISH_TYPE, MAX(LENGTH) + FROM FISH_INFO + GROUP BY FISH_TYPE +) AND I.FISH_TYPE = N.FISH_TYPE +ORDER BY I.ID; + + +-- OVER() 사용 코드 +SELECT ID, FISHNAME, LENGTH +FROM ( + SELECT ID, FISHTYPE, LENGTH, + RANK() OVER(PARTITION BY FISHTYPE ORDER BY LENGTH DESC) AS LENGTHRANK + FROM FISHINFO +) AS INFO +JOIN FISHNAMEINFO AS NAME +ON NAME.FISHTYPE = INFO.FISHTYPE +WHERE LENGTHRANK = 1 +ORDER BY ID; \ No newline at end of file From 37c9db7bb99df4074f8095d4c18eac29f1cf9f14 Mon Sep 17 00:00:00 2001 From: baexxbin Date: 2025年2月22日 13:07:02 +0900 Subject: [PATCH 5/6] =?UTF-8?q?=EB=B0=B0=EC=88=98=EB=B9=88:=20[BOJ]=20?= =?UTF-8?q?=EA=B3=A0=EB=8C=80=20=EB=AC=B8=EB=AA=85=20=EC=9C=A0=EC=A0=81=20?= =?UTF-8?q?=ED=83=90=EC=82=AC=5F250222?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...354円240円201円355円203円220円354円202円254円.java" | 246 ++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 "CodeTree/2023-2024353円205円204円/SB_352円263円240円353円214円200円353円254円270円353円252円205円354円234円240円354円240円201円355円203円220円354円202円254円.java" diff --git "a/CodeTree/2023-2024353円205円204円/SB_352円263円240円353円214円200円353円254円270円353円252円205円354円234円240円354円240円201円355円203円220円354円202円254円.java" "b/CodeTree/2023-2024353円205円204円/SB_352円263円240円353円214円200円353円254円270円353円252円205円354円234円240円354円240円201円355円203円220円354円202円254円.java" new file mode 100644 index 00000000..7639049a --- /dev/null +++ "b/CodeTree/2023-2024353円205円204円/SB_352円263円240円353円214円200円353円254円270円353円252円205円354円234円240円354円240円201円355円203円220円354円202円254円.java" @@ -0,0 +1,246 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.*; + +public class SB_고대문명유적탐사 { + static int K, M; + static int[][] board = new int[5][5]; + static int[] relics; + static int[] dx = {-1, 1, 0, 0}; + static int[] dy = {0, 0, -1, 1}; + static PriorityQueue mxValQue = new PriorityQueue(); // 1차 탐사시 최고 가치를 만드는 정보 (가치, 회전횟수, 좌표) + static int[][] valBoard = new int[5][5]; + static int mxVal = 0; + static int idx = 0; + + private static int bfs(int x, int y, boolean[][] visited, int[][] before) { + Deque que = new ArrayDeque(); + int idx = before[x][y]; + que.offer(new Node(x, y, idx)); + visited[x][y] = true; + int cnt = 1; + + while (!que.isEmpty()) { + Node cur = que.poll(); + for (int i = 0; i < 4; i++) { + int nx = cur.x + dx[i]; + int ny = cur.y + dy[i]; + if (!isValid(nx, ny) || visited[nx][ny] || before[nx][ny]!=idx) continue; + que.offer(new Node(nx, ny, idx)); + visited[nx][ny] = true; + cnt++; + } + } + + return cnt < 3 ? 0 : cnt; + } + + private static int getValue(int[][] before) { + boolean[][] visited = new boolean[5][5]; + int total = 0; + for (int i = 0; i < 5; i++) { + for (int j=0; j<5; j++) { + if (!visited[i][j]) total += bfs(i, j, visited, before); + } + } + return total; + } + + private static void rotate(int mx, int my, int[][] before) { + int sx = mx-1; // 돌릴 작은 사각형의 시작은 중심점의 좌상단에 위치(-1, -1) + int sy = my-1; + for (int k=0; k<3; k++) { + int[][] tmp = copy(before); + // 90도 회전 수행 + for (int i = sx; i < sx+3; i++) { + for (int j = sy; j < sy+3; j++) { + int ox = i-sx; + int oy = j-sy; + int rx = oy; + int ry = 3-ox-1; + tmp[sx+rx][sy+ry] = before[i][j]; + } + } + + // 회전 내용 반영 + before = copy(tmp); + + // 1차 유물 획득 가치 얻기 + int tmpVal = getValue(before); + ValInfo pre = mxValQue.peek(); + mxValQue.offer(new ValInfo(tmpVal, k, mx, my)); // 중심좌표 값 넣어주기 + + if (pre==null || !pre.equals(mxValQue.peek())) { // 첫번째 값이거나, 가치가 업데이트 되면 보드판도 업데이트 + valBoard = copy(before); + } + + } + } + + private static int[][] copy(int[][] origin) { + int[][] tmp = new int[5][5]; + for (int i = 0; i < 5; i++) { + for (int j = 0; j < 5; j++) { + tmp[i][j] = origin[i][j]; + } + } + return tmp; + } + + private static boolean isValid(int x, int y) { + return 0<=x && x<5 && 0<=y && y<5; + } + + private static int explore() { + // 모든 지점 최대가치 검사 + for (int i = 1; i < 4; i++) { + for (int j = 1; j < 4; j++) { + int[][] before = copy(board); + rotate(i, j, before); + } + } + + // 유물 1차 획득 보드 선정 + board = copy(valBoard); +// mxVal += mxValQue.poll().val; // 1차 최대 가치 획득 + if (!mxValQue.isEmpty()) return mxValQue.poll().val; + else return 0; +// return mxValQue.poll().val; + } + + private static int getRelic() { // 유물찾고 빵꾸 뚫기 + boolean[][] visited = new boolean[5][5]; + + int cnt = 0; // 한 탐사에서 얻는 가치 + for (int i = 0; i < 5; i++) { + for (int j = 0; j < 5; j++) { + if (!visited[i][j] && board[i][j] != -1) { + cnt += checkRelic(i, j, visited); + } + } + } + + mxVal += cnt; + return cnt; + } + + private static int checkRelic(int x, int y, boolean[][] visited) { + Deque que = new ArrayDeque(); + int idx = board[x][y]; + List removeLst = new ArrayList(); + + que.offer(new Node(x, y, idx)); + visited[x][y] = true; + removeLst.add(new Node(x, y, idx)); + + while (!que.isEmpty()) { + Node cur = que.poll(); + for (int i = 0; i < 4; i++) { + int nx = cur.x + dx[i]; + int ny = cur.y + dy[i]; + if (!isValid(nx, ny) || visited[nx][ny] || board[nx][ny] != idx) continue; + que.offer(new Node(nx, ny, idx)); + visited[nx][ny] = true; + removeLst.add(new Node(nx, ny, idx)); + } + } + + if (removeLst.size()>= 3) { + for (Node n : removeLst) { + board[n.x][n.y] = -1; + } + } + return removeLst.size()>=3 ? removeLst.size() : 0; + } + + private static void putPiece() { + for (int j = 0; j < 5; j++) { + for (int i = 4; i>= 0; i--) { + if (board[i][j]!=-1)continue; + board[i][j] = relics[idx]; + idx++; + } + } + } + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + StringBuilder sb = new StringBuilder(); + + K = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + relics = new int[M]; + + for (int i = 0; i < 5; i++) { + st = new StringTokenizer(br.readLine()); + for (int j = 0; j < 5; j++) { + board[i][j] = Integer.parseInt(st.nextToken()); + } + } + + st = new StringTokenizer(br.readLine()); + for (int i = 0; i < M; i++) { + relics[i] = Integer.parseInt(st.nextToken()); + } + + + while (K--> 0) { + // 가치 최대화할 격자 선택하기 + mxValQue.clear(); + mxVal = 0; + + // 해당 좌표에서 회전을 진행했을때 가치 기록 후 조건에 따라 격자 및 회전 선택 + if (explore()==0) break; + + while (getRelic()!=0) { + putPiece(); + } + sb.append(mxVal).append(" "); + } + System.out.println(sb); + } + + static class Node{ + int x, y, idx; + + public Node(int x, int y, int idx) { + this.x = x; + this.y = y; + this.idx = idx; + } + } + + static class ValInfo implements Comparable{ + int val, rt, r, c; + + public ValInfo(int val, int rt, int r, int c) { + this.val = val; + this.rt = rt; + this.r = r; + this.c = c; + } + + @Override + public int compareTo(ValInfo o) { + if (o.val-this.val==0){ + if (this.rt - o.rt==0){ + if (this.c-o.c==0) { + return this.r - o.r; + } return this.c-o.c; + } return this.rt - o.rt; + }return o.val - this.val; + } + + @Override + public String toString() { + return "ValInfo{" + + "val=" + val + + ", rt=" + rt + + ", r=" + r + + ", c=" + c + + '}'; + } + } +} From 0f680633b9915a07eee858c6cc82d343ad1a5475 Mon Sep 17 00:00:00 2001 From: baexxbin Date: 2025年2月23日 20:18:37 +0900 Subject: [PATCH 6/6] =?UTF-8?q?=EB=B0=B0=EC=88=98=EB=B9=88:=20[BOJ]=201923?= =?UTF-8?q?7=20=EC=96=B4=EB=A5=B8=20=EC=83=81=EC=96=B4=5F250223(=EB=AF=B8?= =?UTF-8?q?=ED=95=B4=EA=B2=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "BOJ/15001-20000353円262円210円/SB_19237.java" | 205 ++++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 "BOJ/15001-20000353円262円210円/SB_19237.java" diff --git "a/BOJ/15001-20000353円262円210円/SB_19237.java" "b/BOJ/15001-20000353円262円210円/SB_19237.java" new file mode 100644 index 00000000..c4b4ce1c --- /dev/null +++ "b/BOJ/15001-20000353円262円210円/SB_19237.java" @@ -0,0 +1,205 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.*; + +public class SB_19237 { + static int N, M, K; + static int[] dx = {-1, 1, 0, 0}; // 상하좌우 + static int[] dy = {0, 0, -1, 1}; + static int[][] board; + static Smell[][] sBoard; + static int[][][] dir; + static Shark[] sharks; + + private static boolean checkShark() { + int cnt = 0; + for (Shark s : sharks) { + if (!s.isDead) cnt++; + } + return cnt == 1; + } + + private static void spreadSmell() { + for (int i = 0; i < N; i++) { + for (int j = 0; j < N; j++) { + if (sBoard[i][j].idx==0) continue; + sBoard[i][j].t--; + if (sBoard[i][j].t==0) sBoard[i][j].idx = 0; + } + } + } + + private static void moveShark() { + int[][] tmpBoard = new int[N][N]; + + for (Shark s : sharks) { + if (s.idx==0 || s.isDead) continue; + + // 아무 냄새 없는 칸 있는지 체크 + int mvDir = -1; + for (int d : dir[s.idx][s.d]) { // 현재 상어가 보고있는 방향부터 + int nx = s.x + dx[d]; + int ny = s.y + dy[d]; + if (!isValid(nx, ny) || sBoard[nx][ny].idx!=0) continue; + mvDir = d; + break; + } + + if (mvDir==-1) { // 냄새 빈칸이 없을 경우 + for (int d : dir[s.idx][s.d]) { // 현재 상어가 바라보는 위치에서 이동 우선순위 + int nx = s.x + dx[d]; + int ny = s.y + dy[d]; + + if (!isValid(nx, ny) || sBoard[nx][ny].idx!= s.idx) continue; + mvDir = d; + break; + } + } + + // 위치 최종 설정 + s.x+= dx[mvDir]; + s.y += dy[mvDir]; + s.d = mvDir; + + if (tmpBoard[s.x][s.y] != 0) { + s.isDead = true; + }else{ + board[s.x][s.y] = s.idx; + tmpBoard[s.x][s.y] = K; + } + } + + + // 모든 상어가 이동이 끝나면 냄새 뿌리기 + for (Shark s : sharks) { + if (s.idx==0 || s.isDead) continue; + sBoard[s.x][s.y] = new Smell(s.idx, K); + } + } + + private static boolean isValid(int x, int y) { + return 0 <= x && x < N && 0 <= y && y < N; + } + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + K = Integer.parseInt(st.nextToken()); + + board = new int[N][N]; + sBoard = new Smell[N][N]; + dir = new int[M+1][4][4]; + + // 냄새보드 초기화 + for (int i = 0; i < N; i++) { + for (int j = 0; j < N; j++) { + sBoard[i][j] = new Smell(0, 0); + } + } + + sharks = new Shark[M + 1]; + for (int i = 0; i < N; i++) { // 보드 입력 + st = new StringTokenizer(br.readLine()); + for (int j = 0; j < N; j++) { + int num = Integer.parseInt(st.nextToken()); + board[i][j] = num; + if (num != 0) { + sharks[num] = new Shark(num, i, j); + sBoard[i][j] = new Smell(num, K); // 처음 냄새 남기기 + } + } + } + + + st = new StringTokenizer(br.readLine()); // 상어 방향 입력 + for (int i = 1; i <= M; i++) { + int d = Integer.parseInt(st.nextToken())-1; + sharks[i].setDir(d); + } + sharks[0] = new Shark(0, 0, 0); + sharks[0].isDead = true; + + for (int k = 1; k <= M; k++) { // 상어별 우선순위 방향 입력 + for (int i=0; i<4; i++) { + st = new StringTokenizer(br.readLine()); + for (int j = 0; j < 4; j++) { + dir[k][i][j] = Integer.parseInt(st.nextToken())-1; + } + } + } + + int time = 0; + while (time++ <= 1000) { + // 상어 이동 + moveShark(); + + // 냄새 시간 -- + spreadSmell(); + + // 상어 체크 + if (checkShark()) { + System.out.println(time); + return; + } + } + System.out.println(-1); + } + + static class Shark implements Comparable{ + int x, y, idx, d; + boolean isDead = false; + + public Shark(int idx, int x, int y) { + this.idx = idx; + this.x = x; + this.y = y; + } + + public void setDir(int d) { + this.d = d; + } + + private void move(int x, int y, int d) { + this.x = x; + this.y = y; + this.d = d; + } + + @Override + public int compareTo(Shark o) { + return this.idx - o.idx; + } + + @Override + public String toString() { + return "Shark{" + + "x=" + x + + ", y=" + y + + ", idx=" + idx + + ", d=" + d + + ", isDead=" + isDead + + '}'; + } + } + + static class Smell{ + int idx, t; + + public Smell(int idx, int t) { + this.idx = idx; + this.t = t; + } + + @Override + public String toString() { + return "Smell{" + + "idx=" + idx + + ", t=" + t + + '}'; + } + } +}

AltStyle によって変換されたページ (->オリジナル) /