PS

[PS/Golang] 회문 순열

wookiist 2021. 7. 28. 10:05
728x90

Prologue

회문 순열 문제를 너무 바보같이 푼게 화가 나서 방금 올렸던 Python 이후에 Go로도 짜보았습니다.. ㅋㅋㅋㅋ 아으아!!!!!!! 이렇게 구현하면, 사실상 O(n) 만에 해결 가능합니다.

코드

package main

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

var (
    w  = bufio.NewWriter(os.Stdout)
    sc = bufio.NewScanner(os.Stdin)
)

func main() {
    defer w.Flush()
    words := scanWords()
    fmt.Fprintln(w, solution(words))
}

func solution(words string) bool {
    wordsMap := make(map[rune]int)
    for _, word := range words {
        if _, ok := wordsMap[word]; !ok {
            wordsMap[word] = 1
        } else {
            wordsMap[word]++
        }
    }

    if len(words)%2 == 0 {
        for _, val := range wordsMap {
            if val%2 != 0 {
                return false
            }
        }
    } else {
        oneValue := 0
        for _, val := range wordsMap {
            if val%2 != 0 {
                oneValue++
            }
            if oneValue > 1 {
                return false
            }
        }
    }
    return true
}

func scanWords() string {
    sc.Scan()
    s := sc.Text()
    s = strings.ReplaceAll(s, " ", "")
    return s
}
728x90
반응형

'PS' 카테고리의 다른 글

[PS/Golang] 회문 순열  (2) 2021.07.28
[PS/Python] 회문 순열  (0) 2021.07.28