BOJ 1157 : 단어공부

Ok Haeeun·2022년 12월 17일
0

Go로 algorithm문풀

목록 보기
9/16

오늘은 문자열을 입력받아서 가장 많이 쓰인 알파벳을 출력하는 문제다. 가장 많이 쓰인 알파벳이 중복되는 경우엔 ?를 출력해야 하므로 중복의 여부를 담는 bool도 필요했다.

fmt.Scan()을 이용했더니 시간초과가 계속 나와서
bufio.NewReader로 읽는 방식으로 했더니 채점이 되었다...!확실히 버퍼 입출력이 빠른가보다. 이렇게 점점 golang과 가까워지고 있다.

strings패키지를 공부하고, 많이 써보면 유용하겠다는 생각이 들었다. strings.ToUpper(), strings.ToLower() 등의 대소문자 변경 메서드도 지원하고, 그 외에 다른 메서드들도 많았다...!공식문서를 한번 읽어보는 시간을 가져야겠다.

package main

import (
	"bufio"
	"fmt"
	"log"
	"os"
	"strings"
)

func main(){
	r := bufio.NewReader(os.Stdin)
	str, err := r.ReadString('\n')

	if err!=nil{
		log.Fatal(err)
	}

	var slice []int = make([]int, 27)

	str = strings.TrimSpace(str)
	str = strings.ToUpper(str)

	for _,s := range str{
		slice[int(s)-64] += 1
	}

	var isSame bool
	for i, n := range slice{
		if n > slice[slice[0]]{
			isSame = false
			slice[0] = i
		} else if n == slice[slice[0]]{
			isSame = true
			slice[0] = i
		}
	}

	if isSame {
		fmt.Println("?")
	} else{
		fmt.Printf("%c\n", slice[0]+64)
	}
}

아직은 파이썬과 비슷하게 풀고 있어서 golang의 장점을 크게 살리지 못하고 있다. 너무 욕심부리지 말고 하루에 조금씩 조금씩 배워서 더 가까워지고싶다!

golang에서 24ms 는 조금 느린 편에 속하는데,
나 바로 다음으로 다른 분이 java로 푼 것의 채점결과에서 메모리가 자릿수부터 다르고, 시간도 몇백ms가 걸리는 것을 보게 되면서 확실히 golang이 다른 언어보다는 몹시 빠르다는 것을 새삼스레 깨달았다.

profile
貫徹

0개의 댓글