본문 바로가기

Study/algorithms

[백준] 2751 수 정렬하기 golang

반응형

https://www.acmicpc.net/problem/2751

golang에서 sort의 사용법을 알아보자

package main

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

var writer = bufio.NewWriter(os.Stdout)
var reader = bufio.NewReader(os.Stdin)

func printf(f string, a ...interface{}) { fmt.Fprintf(writer, f, a...) }
func scanf(f string, a ...interface{})  { fmt.Fscanf(reader, f, a...) }

func main() {
	defer writer.Flush()
	var n int

	scanf("%d\n", &n)
	arr := make([]int, n)
	for i := 0; i < n; i++ {
		scanf("%d\n", &arr[i])
	}

	sort.IntSlice(arr).Sort()
	for i := 0; i < n; i++ {
		printf("%d\n", arr[i])
	}
}

int형 슬라이스는 위와 같이 정렬할 수 있다.

다른 타입도 살펴보자

https://golang.org/pkg/sort/

 

sort package를 사용해서 sort를 하면 nlogn 시간을 보장한다고 한다. 그리고 이것을 사용 하려면 기본적으로 어떤 타입에 대한 Len(), Swap(), Less()함수를 구현해야한다. 하지만 이미 구현되어 있는 것도 있다. 위의 sort doc 사이트에 들어가보면

float64, int, string에 대한 slice타입이 정의되어있고 그에맞는 함수들도 정의되어있다 따라서 이 3개의 타입은 그냥 이것을 사용하면된다.

 

사용자 정의 타입에 대해서는 다음과 같이 함수를 정의 해서 사용할 수 있다.

https://yourbasic.org/golang/how-to-sort-in-go/

type Person struct {
    Name string
    Age  int
}

// ByAge implements sort.Interface based on the Age field.
type ByAge []Person

func (a ByAge) Len() int           { return len(a) }
func (a ByAge) Less(i, j int) bool { return a[i].Age < a[j].Age }
func (a ByAge) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }

func main() {
    family := []Person{
        {"Alice", 23},
        {"Eve", 2},
        {"Bob", 25},
    }
    sort.Sort(ByAge(family))
    fmt.Println(family) // [{Eve 2} {Alice 23} {Bob 25}]
}

 

'Study > algorithms' 카테고리의 다른 글

[백준] 11650 좌표 정렬하기  (0) 2020.01.25
[백준] 2108 통계학  (0) 2020.01.25
[백준] 1436 영화감독 숌  (0) 2020.01.24
[백준] 1018 체스판 다시 칠하기  (0) 2020.01.24
[백준] 7568 덩치  (0) 2020.01.22