leetcode.com/problems/word-pattern/
안녕하세요 후르륵짭짭 입니다!
이번 문제는 쪼끔,,,, 난감했는데요... 문제를 잘 이해하기 못 했습니다... ㅠㅠ
일단 문제 설명이랑 저의 코드 부터 가겠습니다.
** 문제 설명 **
문제가 일단 패턴과 문자열을 줍니다.
그리고 이 문자열을 띄어쓰기를 기준으로 나눴을 때, 패턴과 문자열이 1 : 1 대칭 ( bijection ) 이 되는지 물어보는 거였습니다.
그러니깐 , 패턴 = abea 이고 문자열은 dog cat fish dog 라고 한다면 서로 문자가 같은 것을 확인 할 수 있습니다.
왜냐하면 문자열을 a b e a 로 바꾼다면 패턴과 동일하기 때문입니다.
** 저의 풀이 **
class Solution {
func wordPattern(_ pattern: String, _ str: String) -> Bool {
var patterDict : [Character : String] = [:]
var patterBet : Character = "a"
var arrayPattern = pattern.map { (char) -> String in
if let exist = patterDict[char] {
return exist
}
else{
patterDict[char] = String(patterBet)
patterBet = Character( UnicodeScalar(patterBet.asciiValue! + 1) )
}
return String(patterDict[char]!)
}
var arrayStr = str.components(separatedBy: " ")
var strDict : [String : String] = [:]
var strBet : Character = "a"
for (index , element) in arrayStr.enumerated() {
if let exist = strDict[element] {
arrayStr[index] = exist
}
else{
strDict[element] = String(strBet)
arrayStr[index] = String(strBet)
strBet = Character( UnicodeScalar(strBet.asciiValue! + 1) )
}
}
return arrayPattern.joined() == arrayStr.joined() ? true : false
}
}
저는 패턴과 문자열을 모두 Dictionary를 이용해서 abc 알파벳 순서로 바꿔줬습니다.
( 참고로 아스키 코드 값으로 변경 하기 위해서는 Character 타입에서 asciiValue 를 통해 Int8 값으로 변경 할 수 있습니다.
그리고 아스키 코드 값을 Character로 변경하기 위해서는 Character( UnicodeScalar( 숫자 ) ) 를 넣어주시면 됩니다. )
그리고 두 문자가 동일하다면 true를 아니면 false를 출력해줬습니다.
** 다른 사람의 코드 **
func wordPattern(_ pattern: String, _ str: String) -> Bool {
let words = str.split(separator: " ")
let patterns = Array(pattern)
if patterns.count != words.count || Set(patterns).count != Set(words).count { return false }
var patternDict = [Character:Int]()
for i in 0..<patterns.count {
if let index = patternDict[patterns[i]] {
if words[i] != words[index] {
return false
}
} else {
patternDict[patterns[i]] = i
}
}
return true
}
이 분의 코드는
패턴 = abea 이고 문자열은 dog cat fish dog 라고 한다면
Dictionary를 이용해서 현재 문자와 배열 위치를 저장해줍니다.
그리고 패턴에서 동일 한 패턴이 나온다면 위치 값을 문자열 Index에 넣고 현재 Index 위치에서의 문자열 값과 비교해줍니다
항상 알고리즘은 좋은 코드를 봐야하는 것 같습니다 ㅎㅎㅎ
'Xcode > Swift - Algorithm' 카테고리의 다른 글
Swift) 프로그래머스(Lv1)- 실패율 (Sorted) (0) | 2020.08.26 |
---|---|
Swift) 프로그래머스(Lv1) - [1차] 비밀지도 (String) (0) | 2020.08.23 |
Swift) LeetCode(Easy) - Symmetric Tree (BFS&Recursive) (0) | 2020.08.18 |
Swift) LeetCode(Easy) - Minimum Depth of Binary Tree (BFS&DFS) (0) | 2020.08.18 |
Swift) 프로그래머스(Lv1) - 핸도폰 번호 가리기 (String) (0) | 2020.08.16 |
댓글