일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 알림 시스템
- Infra
- UnBuffered channel
- GoF 디자인패턴
- notification system
- GoF
- tenneling
- Buffered channel
- AWS
- goroutine
- gitops
- System Design
- Kubernetes
- image resizing
- AWS Infra
- 디자인패턴
- 시스템 설계
- go
- 대규모 시스템 설계
- 클래스 관계
- 컴포지트패턴
- 컴포짓패턴
- Golines
- Lambda@Edge
- golang
- Bastion Server
- Live Template
- Logrus
- Helm V3
- argocd
Archives
- Today
- Total
Fall in IT.
입력받은 문자열에 중복되는 문자가 있는지 확인 방법 본문
안녕하세요.
오늘은 입력받은 문자열에 중복된 문자가 존재하는지 확인하는 알고리즘을 작성해보겠습니다.
(아래 알고리즘은 Golang 언어를 사용하므로 언어에 따라 다를 수 있습니다)
사전지식
- 문자열 집한인 문자열을 순회할 수 있는가?
- 한글과 영문 모두 문자열 순회할 수 있는가? (index 순회를 할 경우 구분 필요, range로 순회할 경우 rune타입으로 변환하여 순회하기 때문에 상관없다)
- rune 타입에 대하여 알고 있는가? (rune은 유니코드를 표현하는 타입으로 int32 타입의 별칭과 같다)
- 유니코드 인코딩에서 한글은 3byte를 사용하고 영어는 1byte를 사용한다.
- 유니코드와 아스키코드의 개념
문제
- 문자열이 주어졌을때 이 문자열에 같은 문자가 중복되어 존재하는지 확인하라
- 자료구조를 사용하지 않고 확인하는 방법도 작성하라
풀이
func main() {
fmt.Println(isDuplicateCharactor("114"))
fmt.Println(isDuplicateCharactor("145"))
fmt.Println(isDuplicateCharactor("19151"))
fmt.Println(isDuplicateCharactor("가나다라마가"))
fmt.Println("=============================================")
fmt.Println(isDuplicateCharactor2("114"))
fmt.Println(isDuplicateCharactor2("145"))
fmt.Println(isDuplicateCharactor2("19151"))
fmt.Println(isDuplicateCharactor2("가나다라마가"))
}
func isDuplicateCharactor(input string) bool {
var (
charMap = make(map[string]bool)
result = false
)
if input == "" {
return result
}
for _, v := range input {
char := string(v)
fmt.Println(char, v)
if _, exist := charMap[char]; exist {
result = true
break
}
charMap[char] = true
}
fmt.Println(charMap)
return result
}
func isDuplicateCharactor2(input string) bool {
var result = false
if input == "" {
return result
}
// len()은 바이트 길이를 반환하기 때문에 한국어와 같은 3byte 문자를 사용하면 깨지게 된다.
// 이땐 rune타입을 사용하여 문자 하나를 4바이트로 변환시킨 후 출력할 수 있다.
// for i := 0; i < len(input); i++ {
// fmt.Println(string(input[i]))
// }
inputRune := []rune(input)
for i := 0; i < len(inputRune); i++ {
char := string(inputRune[i])
for j := i + 1; j < len(inputRune); j++ {
char2 := string(inputRune[j])
if char == char2 {
return true
}
}
}
return result
}
'Algorithm' 카테고리의 다른 글
프로그래머스 코딩테스트 [완전탐색] - 숫자 야구 (1) | 2019.12.27 |
---|---|
프로그래머스 코딩테스트 [2018 KAKAO BLIND RECRUITMENT] - 뉴스 클러스터링 (0) | 2019.12.26 |
프로그래머스 코딩테스트 [스택/큐] - 쇠막대기 (0) | 2019.12.22 |
프로그래머스 코딩테스트 [2018 KAKAO BLIND RECRUITMENT] (0) | 2019.12.12 |
프로그래머스 코딩테스트 [2019 KAKAO BLIND RECRUITMENT] (0) | 2019.12.12 |
Comments