From 84fd73787d945037c58bf1efc1876df437aaea74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BC=8A=E8=97=A4=20=E8=81=96=E5=A4=9C?= Date: Thu, 11 Jul 2024 13:18:11 +0900 Subject: [PATCH 1/3] =?UTF-8?q?paiza=E3=81=AEB106=E3=81=AE=E5=9B=9E?= =?UTF-8?q?=E7=AD=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sitou/src/B106_ChangeSeat.java | 69 ++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 sitou/src/B106_ChangeSeat.java diff --git a/sitou/src/B106_ChangeSeat.java b/sitou/src/B106_ChangeSeat.java new file mode 100644 index 0000000..6e939bc --- /dev/null +++ b/sitou/src/B106_ChangeSeat.java @@ -0,0 +1,69 @@ +package src; + +import java.util.Scanner; + +public class B106_ChangeSeat { + public static void main(String[] args) { + final Scanner sc = new Scanner(System.in); + final int height = sc.nextInt(); + final int width = sc.nextInt(); + final int[][] seats = new int[height][width]; + final int student = sc.nextInt(); + + // 入力 + for (int i = 1; i <= student; i++) { + int seatNo = sc.nextInt() - 1; + int indexH = seatNo / width; + int indexW = seatNo % width; + seats[indexH][indexW] = i; + } + + //席替え + int newSeats[][] = SeatChanger.changeSeat(height, width, seats); + + // 出力 + print(height, width, newSeats); + + sc.close(); + } + + private static void print(int height, int width, int[][] newSeat) { + for (int i = 0; i < height; i++) { + for (int j = 0; j < width; j++) { + System.out.print(newSeat[i][j]); + if (j != width - 1) + System.out.print(" "); //paiza判定のため + } + System.out.println(); + } + } +} + +class SeatChanger{ + public static int[][] changeSeat(final int height, final int width, final int[][] seats) { + int newSeats[][] = seats; + for (int i = 0; i < height; i++) { + for (int j = 0; j < width; j++) { + + if (newSeats[i][j] != 0) { + moveup(i,j,newSeats); + } + } + } + return newSeats; + } + + private static void moveup(final int i, final int j, int[][] newSeats/*finalつけられる?*/) { + int inow = i; + while (inow > 0) { + if (newSeats[inow - 1][j] == 0) { + newSeats[inow - 1][j] = newSeats[inow][j]; + newSeats[inow][j] = 0; + } else { + return; + } + inow--; + } + } +} + -- GitLab From 8f890fd8a1e8d86586348dedec43cb44439a6d96 Mon Sep 17 00:00:00 2001 From: sitou Date: Fri, 12 Jul 2024 04:32:04 +0000 Subject: [PATCH 2/3] =?UTF-8?q?paiza=E3=81=AEB106=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sitou/src/B106_ChangeSeat.java | 160 ++++++++++++++++++++++++--------- 1 file changed, 116 insertions(+), 44 deletions(-) diff --git a/sitou/src/B106_ChangeSeat.java b/sitou/src/B106_ChangeSeat.java index 6e939bc..4630fa2 100644 --- a/sitou/src/B106_ChangeSeat.java +++ b/sitou/src/B106_ChangeSeat.java @@ -1,69 +1,141 @@ package src; +import java.util.ArrayList; +import java.util.List; import java.util.Scanner; public class B106_ChangeSeat { public static void main(String[] args) { - final Scanner sc = new Scanner(System.in); + B106_ChangeSeat b106 = new B106_ChangeSeat(); + } + + private final InputData inData; + + public B106_ChangeSeat() { + this(input()); + final List> result = execute(); + output(result); + + } + + public B106_ChangeSeat(final InputData data) { + this.inData = data; + } + + private List> execute() { + List> result = new ArrayList>(); + Seats seats = new Seats(inData.height, inData.width); + + result = seats + .changeSeat(inData.height, inData.width, inData.students, inData.seatNoList, + seats.seatsList); + + return result; + } + + private static InputData input() { + Scanner sc = new Scanner(System.in); final int height = sc.nextInt(); final int width = sc.nextInt(); - final int[][] seats = new int[height][width]; - final int student = sc.nextInt(); - - // 入力 - for (int i = 1; i <= student; i++) { - int seatNo = sc.nextInt() - 1; - int indexH = seatNo / width; - int indexW = seatNo % width; - seats[indexH][indexW] = i; - } - - //席替え - int newSeats[][] = SeatChanger.changeSeat(height, width, seats); + final int students = sc.nextInt(); - // 出力 - print(height, width, newSeats); + final List seatNoList = new ArrayList(); + for (int i = 0; i < students; i++) { + seatNoList.add(sc.nextInt()); + } sc.close(); + return new InputData(height, width, students, seatNoList); } - private static void print(int height, int width, int[][] newSeat) { - for (int i = 0; i < height; i++) { - for (int j = 0; j < width; j++) { - System.out.print(newSeat[i][j]); - if (j != width - 1) - System.out.print(" "); //paiza判定のため + private void output(final List> result) { + for (int i = 0; i < inData.height; i++) { + for (int j = 0; j < inData.width; j++) { + System.out.print(result.get(i).get(j)); + if (j != inData.width - 1) + System.out.print(" "); } System.out.println(); } } -} -class SeatChanger{ - public static int[][] changeSeat(final int height, final int width, final int[][] seats) { - int newSeats[][] = seats; - for (int i = 0; i < height; i++) { - for (int j = 0; j < width; j++) { - - if (newSeats[i][j] != 0) { - moveup(i,j,newSeats); + private static class InputData { + final int height; + final int width; + final int students; + final List seatNoList; + + public InputData(final int height, final int width, final int students, + final List seatNoList) { + this.height = height; + this.width = width; + this.students = students; + this.seatNoList = seatNoList; + } + } + + private static class Seats { + final List> seatsList = new ArrayList>(); + + //全て0で座席表List作成 + public Seats(final int height, final int width) { + ArrayList list; + for (int i = 0; i < height; i++) { + list = new ArrayList(); + for (int j = 0; j < width; j++) { + list.add(0); } + seatsList.add(list); } + } - return newSeats; - } - - private static void moveup(final int i, final int j, int[][] newSeats/*finalつけられる?*/) { - int inow = i; - while (inow > 0) { - if (newSeats[inow - 1][j] == 0) { - newSeats[inow - 1][j] = newSeats[inow][j]; - newSeats[inow][j] = 0; - } else { - return; + + public List> changeSeat(final int height, final int width, + final int students, final List seatNoList, + final List> seatsList) { + + List> newSeatsList = seatsList; + + for (int studentNo = 1; studentNo <= students; studentNo++) { + int no = seatNoList.get(studentNo - 1) - 1; //studentNo-1 -> Listを初めから行いたい, (studentNo-1)-1 -> index取得のため + int indexHeight = no / width; + int indexWidth = no % width; + newSeatsList.get(indexHeight).set(indexWidth, studentNo); + } + + moveup(height, width, newSeatsList); + + return newSeatsList; + } + + //もう少し分解すべきか + private void moveup(final int height, final int width, + final List> newSeatsList) { + + for (int i = 0; i < height; i++) { + for (int j = 0; j < width; j++) { + + int nowlookSeat = newSeatsList.get(i).get(j); + if (nowlookSeat != 0) { + int move_i = i; + while (move_i > 0) { + + if (newSeatsList.get(move_i - 1).get(j) == 0) { + newSeatsList.get(move_i - 1).set(j, nowlookSeat); + newSeatsList.get(move_i).set(j, 0); + move_i--; + } else { + break; + } + + } + + } + + } } - inow--; + } + } } - -- GitLab From 26b1da86781c1ff78d4fd277d784b5a0359d2270 Mon Sep 17 00:00:00 2001 From: sitou Date: Fri, 12 Jul 2024 07:28:10 +0000 Subject: [PATCH 3/3] =?UTF-8?q?B106=E3=81=AE=E4=BF=AE=E6=AD=A3=EF=BC=88?= =?UTF-8?q?=E5=BC=95=E6=95=B0=E3=81=ABInputData=E3=80=81for=E6=96=87?= =?UTF-8?q?=E5=86=85=E3=81=AE=E5=A4=89=E6=95=B0=E3=81=ABfinal=E3=80=81move?= =?UTF-8?q?up->moveUp=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sitou/src/B106_ChangeSeat.java | 36 ++++++++++++++++------------------ 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/sitou/src/B106_ChangeSeat.java b/sitou/src/B106_ChangeSeat.java index 4630fa2..68faaba 100644 --- a/sitou/src/B106_ChangeSeat.java +++ b/sitou/src/B106_ChangeSeat.java @@ -25,11 +25,9 @@ public class B106_ChangeSeat { private List> execute() { List> result = new ArrayList>(); Seats seats = new Seats(inData.height, inData.width); - - result = seats - .changeSeat(inData.height, inData.width, inData.students, inData.seatNoList, - seats.seatsList); - + + result = seats.changeSeat(inData, seats.seatsList); + return result; } @@ -77,11 +75,11 @@ public class B106_ChangeSeat { private static class Seats { final List> seatsList = new ArrayList>(); - //全て0で座席表List作成 + // 全て0で座席表List作成 public Seats(final int height, final int width) { - ArrayList list; + // ArrayList list; for (int i = 0; i < height; i++) { - list = new ArrayList(); + ArrayList list = new ArrayList(); for (int j = 0; j < width; j++) { list.add(0); } @@ -90,28 +88,28 @@ public class B106_ChangeSeat { } - public List> changeSeat(final int height, final int width, - final int students, final List seatNoList, + public List> changeSeat(final InputData inputData, final List> seatsList) { - + List> newSeatsList = seatsList; - for (int studentNo = 1; studentNo <= students; studentNo++) { - int no = seatNoList.get(studentNo - 1) - 1; //studentNo-1 -> Listを初めから行いたい, (studentNo-1)-1 -> index取得のため - int indexHeight = no / width; - int indexWidth = no % width; + for (int studentNo = 1; studentNo <= inputData.students; studentNo++) { + final int no = inputData.seatNoList.get(studentNo - 1) - 1; // studentNo-1 -> Listを初めから行いたい, + // (studentNo-1)-1 -> index取得のため + final int indexHeight = no / inputData.width; + final int indexWidth = no % inputData.width; newSeatsList.get(indexHeight).set(indexWidth, studentNo); } - moveup(height, width, newSeatsList); + moveUp(inputData.height, inputData.width, newSeatsList); return newSeatsList; } - //もう少し分解すべきか - private void moveup(final int height, final int width, + // もう少し分解すべきか + private void moveUp(final int height, final int width, final List> newSeatsList) { - + for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { -- GitLab