BOJ 10807 : 개수 세기

Ok Haeeun·2022년 12월 14일
0

Go로 algorithm문풀

목록 보기
6/16

일차원 배열 문제 중 어제 문제보다는 훨씬 쉬운 문제였는데, bufio를 써보고 싶어서 조금 쉬운 문제를 고르게 되었다.

bufio 패키지

bufio 패키지에서는 입출력 인터페이스 함수를 제공한다.

  • func NewReader(rd io.Reader) *Reader : io.Reader 인터페이스를 reader로 받아 읽기 인스턴스 생성
  • func NewWriter(w io.Writer) *Writer : io.Writer 인터페이스를 writer로 받아 쓰기 인스턴스 생성
  • func (b *Writer)WriterString(s string)(int, error) : 문자열을 버퍼에 저장
  • func (b *Writer)Flush() error : 버퍼의 데이터를 파일에 저장

등의 함수를 많이 사용한다고 한다.
파일에 읽고 쓸 때 이용하는 입출력 인터페이스 함수로 보인다.

나는 다음과 같은 코드에 bufio 패키지를 사용해보았는데,

stdin := bufio.NewReader(os.Stdin)

파일 대신 os.Stdin에서 입력을 불러오는 reader를 stdin이라는 이름에 할당한다는 의미라고 한다.
우리는 이것을 이용해 한줄의 입력을 불러오고, 한글자 한글자 읽다가 에러가 났을 경우 읽기를 중단하고, error 메세지를 내보낸 후 입력을 이어갈 수 있도록 error handling을 할 수 있다.

package main

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

func main(){
	var a, c, count int

	fmt.Scan(&a)
	var slice []int = make([]int, a)

	stdin := bufio.NewReader(os.Stdin)

	for i:=0;i<a;i++{
		var b int
		_, err:=fmt.Scan(&b)

		if err!=nil{
			fmt.Println(err)
			stdin.ReadString('\n')
		} else {
			slice[i] = b
		}
	}

	fmt.Scan(&c)

	for i:=0;i<a;i++{
		if c == slice[i]{
			count += 1
		}
	}

	fmt.Println(count)
}

문제는 위와 같이 풀었고,

이 정도의 효율이 나왔다.
너무 단순한 문제라서 좀 그렇긴하지만 bufio 맛보기에 좋은 경험이었다.

너무 피곤해~얼른 자야지

profile
貫徹

0개의 댓글