728x90

좌표 정렬하기

1 초 256 MB 55178 26613 20212 48.139%

문제

2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

출력

첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.

예제 입력 1 

5
3 -1
4 2
1 2
1 3
1 3

예제 출력 1 복사

1 -1
1  1
2  2
3  3
3  4

 

해결방법

package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
)

var rd *bufio.Reader = bufio.NewReader(os.Stdin)
var wr *bufio.Writer = bufio.NewWriter(os.Stdout)

type coordinate struct {
	x int
	y int
}

func main() {
	var n, x, y int
	fmt.Fscanf(rd, "%d\n", &n)
	coors := make([]coordinate, 0)
	for i := 0; i < n; i++ {
		fmt.Fscanf(rd, "%d %d\n", &x, &y)
		coors = append(coors, coordinate{x, y})
	}
	sort.Slice(coors, func(i, j int) bool {
		if coors[i].x == coors[j].x {
			return coors[i].y < coors[j].y
		}
		return coors[i].x < coors[j].x
	})
	for _, coor := range coors {
		fmt.Fprintf(wr, "%d %d\n", coor.x, coor.y)
	}
	wr.Flush()
}

Golang 의 슬라이스 정렬을 사용하여 해결하였습니다.

x,y 좌표를 담는 구조체를 만들고 coors 로 구조체 들을 값으로 가지는 배열을 만듭니다.

 

sort.Slice(coors, func(i, j int) bool {
	if coors[i].x == coors[j].x {
		return coors[i].y < coors[j].y
	}
	return coors[i].x < coors[j].x
})

 

sort.Slice 를 이용하여 배열의 i번째 값과 j 번째 값을 비교한뒤 더큰 것을 리턴합니다.

그중에서도 i 번째 x 좌표와 j번째 x 좌표가 같을경우 y 의 값을 비교한뒤 리턴합니다.

728x90

'Algorithm > 백준' 카테고리의 다른 글

[백준] 9663번 : N-Queen - Golang  (0) 2022.05.22
백준 4948번: 베르트랑 공준 - golang  (0) 2021.09.22