반응형
개요
https://www.acmicpc.net/problem/2607
처음에는 1920번 수 찾기를 풀었던 경험을 살려 정렬 후 비교하는 로직의 방향으로 코드를 개발했습니다.
다음 규칙을 만족하면 비슷한 단어를 취급합니다
- 구성은 GOD와 DOG를 두고 각각의 알파뱃의 개수가 완전히 같은 경우를 말한다.
- 문자의 글자수가 같다면 안에 구성이 하나는 달라도 된다.
- 글자수 차이가 1개가 난다면 안의 구성이 하나는 달라도 된다.
비슷한 단어를 찾을 값과 비슷한 단어의 값을 담은 slice를 정렬 후 차례대로 비교하다 보니
예외케이스가 너무 많아 이 로직은 아니다 싶어 찾은 게 아래 방식입니다.
간단한 게 최고
해당 문제는 시간복잡도를 크게 신경 쓰지 않아도 되는 문제입니다.
그래서 입력받을 때마다 문자열을 반복문으로 돌려서 차례대로 배열에 포함되는지 검사하고
포함된다면 비교값에서 제거해서 중복체크가 되지 않게 했습니다.
맞을 확률이 20%여서 시간 복잡도를 생각하며 어렵게 다가갔는데
반복문 처리로 쉽게 해결해서 허무했던 문제입니다.
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var num int
var origin string
fmt.Fscanln(reader, &num)
fmt.Fscanln(reader, &origin)
var result int
for i := 1; i < num; i++ {
var compare string
fmt.Fscanln(reader, &compare)
var bigStr, smallStr string
// 배열의 길이가 큰 값을 bigStr, 작은 값을 smallStr 에 할당
if len(origin) > len(compare) {
bigStr, smallStr = origin, compare
} else {
bigStr, smallStr = compare, origin
}
var check int
// 반복문을 돌며 bigStr 의 문자를 smallStr 에서 찾아서 제거
for j := 0; j < len(bigStr); j++ {
if strings.Contains(smallStr, string(bigStr[j])) {
smallStr = strings.Replace(smallStr, string(bigStr[j]), "", 1)
} else {
check++
}
}
if check <= 1 {
result++
}
}
fmt.Println(result)
}
반응형
'Go Lang > Algorithm' 카테고리의 다른 글
[GoLang] 백준 11726번, 11727번 2×n 타일링 (1) | 2024.01.28 |
---|---|
[GoLang] 백준 1018번 체스판 다시 칠하기 (1) | 2024.01.22 |
[GoLang] 백준 7489번 팩토리얼 (0) | 2024.01.17 |
[GoLang] 백준 1920번 수 찾기 (0) | 2024.01.17 |
Go로 소수 구하기 with 백준 1929 (0) | 2022.08.04 |