체리의 하루
Published 2023. 3. 24. 09:54
[Go] BOJ / 1157번 / 단어 공부 BOJ/Go

💻 문제

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

 

📜 풀이

package main

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

func main() {
	var s string
	var max, double, e int
	var alphabet []int = make([]int, 26)

	r := bufio.NewReader(os.Stdin)
	w := bufio.NewWriter(os.Stdout)

	defer w.Flush()

	fmt.Fscanln(r, &s)
	s = strings.ToUpper(s)

	for i := range s {
		n := s[i]
		alphabet[n-65] += 1
	}

	max = -1

	for i := range alphabet {
		if alphabet[i] > max {
			max = alphabet[i]
			double = i
			e = 0
		} else if alphabet[i] == max && alphabet[i] != 0 {
			e = 1
		}
	}

	if e == 1 {
		fmt.Fprintln(w, "?")
	} else if e == 0 {
		fmt.Fprintln(w, string(double+65))
	}
}

 

✍ 설명

  • 동일한 max 이 주어졌을 때 e = 1, else 문을 주어 max 값이 하나인 경우max 출력을 하도록 유도
    • 이 경우 else 문을 썼을 때 50 퍼에서 오류가 발생
    • max 값 발생 시 e = 0 을 주고 else if문을 써 주니 해결됨
  • strings.ToUpper(string) : 모든 문자열을 대문자로 치환
728x90