일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- kube-prometheus-stack
- body size
- go
- Logrus
- gitops
- 사설 ip
- http 413
- 오블완
- GoF
- 대규모 시스템 설계
- intellij ide
- notification system
- Kubernetes
- golang
- m4 pro
- 배포 프로세스
- goland
- UnBuffered channel
- 윈도우키보드
- 디자인패턴
- Intellij
- 티스토리챌린지
- Infra
- cosine similarity metric
- AWS
- 배포 파이프라인
- Buffered channel
- apollo router
- elasticsearch
- 코사인 유사성 메트릭스
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