백준 - 좌표정렬하기 11650번 (정렬) with golang
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 |
댓글
이 글 공유하기
다른 글
-
[백준] 9663번 : N-Queen - Golang
[백준] 9663번 : N-Queen - Golang
2022.05.22 -
백준 4948번: 베르트랑 공준 - golang
백준 4948번: 베르트랑 공준 - golang
2021.09.22