Foma's ํ์ด
๋ฌธ์ ํ์ด
์ด๋ฒ ๋ฌธ์ ๋ ์์นด๋ ์ ์ฌ๋๋ฅผ ํตํด ๋ ๋ฌธ์ฅ์ ๋น๊ตํด ๊ทธ์ ๋ฐ๋ฅธ ์ ์ฌ๋ ๊ฐ์ ๊ตฌํ๋ ๊ฒ์ธ๋ฐ์,
๊ทธ๋ ๋ค๋ฉด ์์นด๋ ์ ์ฌ๋๊ฐ ๋ฌด์์ผ๊น์?
์์นด๋ ์ ์ฌ๋๋ ๋ฌธ์์ ์ ์ฌ๋๋ฅผ ๊ตฌํ๊ธฐ ์ํ ๊ธฐ๋ฒ ์ค ํ๋์ธ๋ฐ์.
์ฐ์ ์์๋ก ์ค๋ช ๋๋ฆฌ๋ฉด ๋ ๋ฌธ์ฅ A : [์๋ ๋๋ ํฌ๋ง์ผ, iOS ๊ณต๋ถ๋ฅผ ํ๊ณ ์นํจ์ ์ข์ํด ์ฌ๋ ๊ณณ์ ์์ธ์ ์๋ ํ๋์ผ ] ์ B : [์๋ , ๋๋ ๋งํฌ์ผ. iOS ๊ฐ๋ฐ์ ํ๊ณ ํผ์๋ฅผ ์ข์ํด. ์ฌ๋ ๊ณณ์ ์์ธ์ ์๋ ์ ์ด์ด์ผ.] ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
๊ทธ๋ผ ๋ ๋ฌธ์ฅ์์ ๊ฒน์น๋ ๋ถ๋ถ ๋จผ์ ์ดํด๋ณด๋ฉด [์๋ , iOS, ์ข์ํด, ํ๊ณ , ์ฌ๋, ๊ณณ์, ์์ธ์, ์๋] ์ด ๋ ๊ฒ์ ๋๋ค. -> ๊ต์งํฉ
๊ทธ๋ฆฌ๊ณ ๋ ๋ฌธ์ฅ์ ํฉ์น๋ฉด [์๋ ๋๋ ํฌ๋ง์ผ, iOS ๊ณต๋ถ๋ฅผ ํ๊ณ ์นํจ์ ์ข์ํด ์ฌ๋ ๊ณณ์ ์์ธ์ ์๋ ํ๋์ผ , ๋งํฌ์ผ, ๊ฐ๋ฐ์ , ํผ์๋ฅผ , ์ ์ด์ด์ผ] ๊ฐ ๋ ๊ฒ์ ๋๋ค. -> ํฉ์งํฉ
์ฌ๊ธฐ์ ํฉ์งํฉ์ ๊ฐฏ์(17)๋ฅผ ๊ต์งํฉ์ ๊ฐฏ์(8)๋ก ๋๋๊ฒ ๋๋ฉด 0.47... ์ด ๋๋๋ฐ ์ด๊ฒ์ด ๋ฐ๋ก ์์นด๋ ์ ์ฌ๋ ๊ฐ์ด ๋ฉ๋๋ค.
์ฝ๋ํ์ด
๋ฌธ์ ์์ ๋์๋ฌธ์ ๊ตฌ๋ณ์ ํ์ง ์๋๋ค๊ณ ํ์ผ๋ฏ๋ก str1๊ณผ str2๋ฅผ ์ผ๊ด์ ์ผ๋ก ์๋ฌธ์๋ก ๋ง๋ค์ด์ค๋๋ค. ๋ ๋ฌธ์์ด์ ๋ค๋ฃจ๊ธฐ ์ฝ๊ฒ ๊ฐ ์บ๋ฆญํฐ๋ฅผ ๋ฐฐ์ดํ ์์ผ์ฃผ๊ธฐ ์ํด map์ ์ฌ์ฉํด์ค๋๋ค.
-> let lowerStr1 = str1.lowercased().map{$0}, let lowerStr2 = str2.lowercased().map{$0}
str1๊ณผ str2๋ฅผ ๋๋ฌธ์๋ก ๋์ ๊ธ์๋ค์ ๋ด์ ๋ฐฐ์ด์ ๋ง๋ค์ด์ค๋๋ค.
- > var set1 = [String]() ,var set2 = [String]()
๋ ๋ฌธ์ฅ์ด ๊ฒน์น๋ ๋ถ๋ถ ๊ต์งํฉ์ ๋ด์ ๋ฐฐ์ด๊ณผ ๋ ๋ฌธ์ฅ์ ํฉ์น ํฉ์งํฉ์ ๋ด์ ๋ฐฐ์ด์ ๋ง๋ค์ด ์ค๋๋ค.
- > var intersection = [String]() , var union = [String]()
๋จผ์ ์๋ฌธ์๋ก ๋ง๋ค์ด์ค lowerStr1์ for๋ฌธ์ ์ฌ์ฉํ์ฌ ๋๊น์ง ์ํํฉ๋๋ค. - > for i in 0..<lowerStr1.count-1 {...}
์กฐ๊ฑด์์ ์๋ฌธ์ด ์๋ ๊ธ์๊ฐ ํฌํจ๋๋ฉด ๋ฒ๋ฆฐ๋ค๊ณ ํ์์ผ๋ฏ๋ก 2๊ธ์ ๋ชจ๋ ์๋ฌธ์ธ์ง ํ์ธํ๊ณ ๋ง๋ค๋ฉด set1์ ๋ด์์ค๋๋ค. -> if isAlphabet(lowerStr1[i], lowerStr1[i+1]) { set1.append("\(lowerStr1[i])\(lowerStr1[i+1])") }
์์ isAlphabet ํจ์๋ฅผ ์ฌ์ฉํ์๋๋ฐ ์ด๊ฒ์ ๋ฌธ์๊ฐ ๋ง๋์ง ์๋์ง ํ์ธํด์ค๋๋ค.
-> func isAlphabet(_ char1 :Character,_ char2:Character) -> Bool {
return char1 >= "a" && char1 <= "z" && char2 >= "a" && char1 <= "z" }
lowerStr2๋ ๋ง์ฐฌ๊ฐ์ง๋ก for๋ฌธ์ ์ฌ์ฉํ์ฌ ์ํํ๊ณ isAlphabet์ ์ฌ์ฉํ์ฌ ํ์ธํ๊ณ set2์ ๋ฃ์ด์ค๋๋ค.
- > for i in 0..<lowerStr2.count-1{
if isAlphabet(lowerStr2[i], lowerStr2[i+1]) {
let twoLetters = "\(lowerStr2[i])\(lowerStr2[i+1])"
set2.append(twoLetters)
๊ทธ๋ฆฌ๊ณค ๋ฐ๋ก set1์ ํด๋น ๋๊ธ์๊ฐ ํฌํจ๋์ด ์๋ค๋ฉด ๊ฒน์น๋ ๋ถ๋ถ์ด๋ฏ๋ก intersection์ ๋ฃ์ด์ฃผ๊ณ set1,set2์์ ๊ฐ ๊ฐ ์ญ์ ํด์ค๋๋ค.
> if set1.contains(twoLetters) {
intersection.append(twoLetters)
set1.remove(at: set1.firstIndex(of: twoLetters)!)
set2.remove(at: set2.firstIndex(of: twoLetters)!)
}
for๋ฌธ์ด ๋๋ ๋ค set1๊ณผ set2๋ฅผ ํฉ์น๊ณ ๊ฒน์น๋ ๋ถ๋ถ์ธ ๊ต์งํฉ๊น์ง ํฉ์ณ์ค ํฉ์งํฉ์ ๋ง๋ค์ด์ค๋๋ค.
- > union = set1 + set2 + intersection
๋ง์ง๋ง์ผ๋ก ๊ต์งํฉ๊ณ ํฉ์งํฉ์ด ๋ชจ๋ ๋น์์ ๋(๊ณต์งํฉ)๋ ๋ฌธ์ ์์ ์ ์๋์ง ์์ผ๋ฏ๋ก 1์ผ๋ก ๊ฐ์ฃผํ๋ค๊ณ ๋์ด์์ต๋๋ค. ๊ณ ๋ก ๋ชจ๋ ๊ณต์งํฉ์ผ ๋ 1์ 65536์ ๊ณฑํฉ ๊ฐ์ ๋ฐํํ๊ณ ์๋๋ผ๋ฉด ํฉ์งํฉ์์ ๊ต์งํฉ์ ๋๋ ๋ค 65536์ ๊ณฑํฉ ์ ์๊ฐ์ ๋ฐํํด์ค๋๋ค. - >
return intersection.isEmpty && union.isEmpty ? 65536 :Int(Double(intersection.count)/Double(union.count)*65536)
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
32
33
34
|
func solution(_ str1:String, _ str2:String) -> Int {
let lowerStr1 = str1.lowercased().map{$0}
let lowerStr2 = str2.lowercased().map{$0}
var set1 = [String]()
var set2 = [String]()
var intersection = [String]()
var union = [String]()
for i in 0..<lowerStr1.count-1 {
if isAlphabet(lowerStr1[i], lowerStr1[i+1]) {
set1.append("\(lowerStr1[i])\(lowerStr1[i+1])")
}
}
for i in 0..<lowerStr2.count-1{
if isAlphabet(lowerStr2[i], lowerStr2[i+1]) {
let twoLetters = "\(lowerStr2[i])\(lowerStr2[i+1])"
set2.append(twoLetters)
if set1.contains(twoLetters) {
intersection.append(twoLetters)
set1.remove(at: set1.firstIndex(of: twoLetters)!)
set2.remove(at: set2.firstIndex(of: twoLetters)!)
}
}
}
union = set1 + set2 + intersection
return intersection.isEmpty && union.isEmpty ? 65536 :Int(Double(intersection.count)/Double(union.count)*65536)
}
func isAlphabet(_ char1 :Character,_ char2:Character) -> Bool {
return char1 >= "a" && char1 <= "z" && char2 >= "a" && char1 <= "z"
}
|
'๐ Problem Solution > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2018 KAKAO BLIND RECRUITMENT [3์ฐจ] n์ง์ ๊ฒ์ Swift (0) | 2020.11.02 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ ์ฐพ๊ธฐ Swift (0) | 2020.10.23 |
ํ๋ก๊ทธ๋๋จธ์ค ์์ ๋ง๋ค๊ธฐ Swift (0) | 2020.10.19 |
2018 KAKAO BLIND RECRUITMENT [1์ฐจ] ์บ์ Swift (0) | 2020.10.17 |
ํ๋ก๊ทธ๋๋จธ์ค ์์ ๋์งํ Swift (0) | 2020.10.17 |
๋๊ธ