본문 바로가기

Code/algorithm with go

9093 ReadString, ReadLine, Fprintf

9093

www.acmicpc.net/problem/9093

 

9093번: 단어 뒤집기

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는

www.acmicpc.net

코드

input, _ := reader.ReadString('\n')
// input = strings.TrimSpace(input)
for i, s := range input {
	fmt.Fprintf(writer, "%d: %s\n", i, string(s))
}
writer.Flush()

eadString 은 newline(\n)을 붙여서 리턴하나보다.

input, _, _ := reader.ReadLine()
for i, s := range input {
	fmt.Fprintf(writer, "%d: %s\n", i, string(s))
}
writer.Flush()

입력에 대해 이런사실을 알게되었다. 

그리고 Fprintf 하면 Flush()를 해줘야 한다. 왜 인지는 아직 모르겠다.

 

package main

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

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	var t int
	fmt.Fscanf(reader, "%d\n", &t)
	var stack []string
	for {
		input, _, _ := reader.ReadLine()
		input = append(input, '\n')
		for _, s := range input {
			if string(s) == " " || string(s) == "\n" {
				for j, _ := range stack {
					fmt.Fprint(writer, string(stack[len(stack)-(j+1)]))
				}
				fmt.Fprintf(writer, " ")
				writer.Flush()
				stack = nil
			} else {
				stack = append(stack, string(s))
			}
		}
		fmt.Fprintf(writer, "\n")
		writer.Flush()
		t = t - 1
		if t == 0 {
			return
		}
	}
}

 

출력을  Fprintf 로 안하면 시간초과가 떴다. 하여튼 통과하고 채점현황을 봤는데

 

 

Go로는 총 4명 제출했고, 나만 시간이 엄청 걸린다ㅎㅎ;

(슬라이스가 아니고 배열을 사용하면 쫌 빨라질것 같다)

 

 

참고자료:

ryanking13.github.io/2020/02/06/golang-io.html