2023. 11. 8. 15:17ใ์ธํ๋ฐ/์๋ฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์ ๋ฌธ : ์ฝ๋ฉํ ์คํธ ๋๋น
https://hyejin.tistory.com/1245
-> ์ด์ ๋ฌธ์ ํ์ด
7. ์ขํ ์ ๋ ฌ
์ค๋ช
N๊ฐ์ ํ๋ฉด์์ ์ขํ(x, y)๊ฐ ์ฃผ์ด์ง๋ฉด ๋ชจ๋ ์ขํ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์.
์ ๋ ฌ๊ธฐ์ค์ ๋จผ์ x๊ฐ์ ์ํด์ ์ ๋ ฌํ๊ณ , x๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ y๊ฐ์ ์ํด ์ ๋ ฌํฉ๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ขํ์ ๊ฐ์์ธ N(3<=N<=100,000)์ด ์ฃผ์ด์ง๋๋ค.
๋ ๋ฒ์งธ ์ค๋ถํฐ N๊ฐ์ ์ขํ๊ฐ x, y ์์ผ๋ก ์ฃผ์ด์ง๋๋ค. x, y๊ฐ์ ์์๋ง ์ ๋ ฅ๋ฉ๋๋ค.
์ถ๋ ฅ
N๊ฐ์ ์ขํ๋ฅผ ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ์ธ์.
์์ ์ ๋ ฅ 1
5
2 7
1 3
1 2
2 5
3 6
์์ ์ถ๋ ฅ 1
1 2
1 3
2 5
2 7
3 6
๋ฌธ์ ํ์ด 1
public class CoordinateAlignment
{
public static void main(String[] args)
{
CoordinateAlignment coordinateAlignment = new CoordinateAlignment();
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
ArrayList<Point> points = new ArrayList<>();
for (int i = 0; i < n; i++)
{
points.add(new Point(scanner.nextInt(), scanner.nextInt()));
}
ArrayList<Point> result = coordinateAlignment.solution(n, points);
for (Point point : result)
{
System.out.println(point.x + " " + point.y);
}
}
public ArrayList<Point> solution(int n, ArrayList<Point> points)
{
Collections.sort(points, (o1, o2) -> {
if (o1.x == o2.x) {
return o1.y - o2.y;
}else {
return o1.x - o2.x;
}
});
return points;
}
}
class Point
{
int x;
int y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
@Override
public String toString()
{
return "Point{" +
"x=" + x +
", y=" + y +
'}';
}
}
๐ฉ๐ป๐ป : ๋๋ ์ฐ์ ์ขํ ์ ๋ ฌ์ด๋ผ๊ณ ํด์ Point๋ผ๋ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ์ด ํด๋์ค๋ฅผ ๊ฐ์ง๊ณ ์ ๋ ฌํด์ผ ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
๊ทธ๋์ ๋จผ์ Point ๋ผ๋ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ , Scanner ๋ฅผ ํตํด ์ขํ๋ฅผ ์ ๋ ฅ ๋ฐ์ผ๋ฉด Point ๊ฐ์ฒด๋ฅผ ํ๋์ฉ ์์ฑํด์ Arraylist์ ๋ด์์คฌ๋ค.
๊ทธ ๋ค์ Collection.sort๋ฉ์๋๋ฅผ ์ด์ฉํด์ points ๋ฆฌ์คํธ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํด์ค ๊ฒ์ธ๋ฐ ์ด๋ ๋๋ค์์ผ๋ก o1, o2 Point ๊ฐ์ฒด๊ฐ ์ฃผ์ด์ง ๋, ๋ง์ฝ o1.x์ o2.x ๊ฐ ๊ฐ์ผ๋ฉด o1.y - o2.y ๋ก ๋บ ๊ฐ์ ๋ฆฌํดํด์คฌ๋ค.
๊ทธ๋ฆฌ๊ณ o1.x์ o2.x๊ฐ ๋ค๋ฅด๋ฉด o1.x - o2.x ๊ฐ์ ๋ฆฌํดํด์ฃผ๋ฉด
์ฐ์ x ๊ฐ์ ์ํด ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ํ๊ณ , x์ ๊ฐ์ด ๊ฐ์ผ๋ฉด y ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ํ๋ค.
๋ฌธ์ ํ์ด 2
public class PointAlignment {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
ArrayList<Point2> point2s = new ArrayList<>();
for (int i = 0; i < n; i++) {
point2s.add(new Point2(scanner.nextInt(), scanner.nextInt()));
}
Collections.sort(point2s);
System.out.println("point2s = " + point2s);
}
}
class Point2 implements Comparable<Point2> {
int x, y;
public Point2(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public int compareTo(Point2 o) {
if (this.x == o.x) {
return this.y - o.y; // ์ค๋ฆ์ฐจ์์ ์์ ๊ฐ์ด ๋์์ผํจ
} else {
return this.x - o.x;
}
}
@Override
public String toString() {
return "Point2{" +
"x=" + x +
", y=" + y +
'}';
}
}
๐พ : ๊ฐ์ฌ๋๋ ๋์ ๋น์ทํ๊ฒ Point ํด๋์ค๋ฅผ ์์ฑํ์๋๋ฐ Point ํด๋์ค์์ Comparable ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ๊ณ , compareTo๋ฉ์๋๋ฅผ ๊ตฌํํ๋ค. Point2์ o ๊ฐ์ฒด๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ฐ, ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ํ๊ธฐ ์ํด์๋ this.x์ o.x ๊ฐ ๊ฐ์ ๊ฒฝ์ฐ์๋ this.y - o.y ๋ฅผ ํด์ฃผ๊ณ , this.x์ o.x์ ๊ฐ์ด ๋ค๋ฅผ ๊ฒฝ์ฐ์๋ return this.x- o.x์ ๊ฐ์ ๋ฆฌํดํด์ฃผ๋ฉด ๋๋ค.
๊ฐ์ฌ๋์ ๋ฐ๋ก solution ๋ฉ์๋๋ฅผ ๋ง๋ค์ง ์๊ณ , for๋ฌธ์ ํตํด์ Arraylist<Point2> ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ๋ฆฌ์คํธ๋ฅผ Collection.sort ๋ฉ์๋์ ๋ฃ์ด์ค์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ๋ง๋ค๊ณ ์ถ๋ ฅํด์คฌ๋ค.
๋ง์ฝ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ ํด์ฃผ๊ณ ์ถ๋คํ๋ฉด ๋ฐ๋๋ก o.x - this.x ๋ฅผ ํด์ค์ผ ํ๋ค.
๐ญ ์ขํ ๊ด๋ จ ๋ฌธ์ ๋ ์ด๋ ๊ฒ Point ํด๋์ค๋ฅผ ํ๋ ๋ง๋ค๊ณ ๊ทธ ํด๋์ค๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋ค !!