Solution
1. ๋๋ฌธ์ ์ํ๋ฒณ์ด ๋ด๊ธด ๋ฐฐ์ด -> var words = (64...90).map({"\(UnicodeScalar($0)!)"})
์์คํค์ฝ๋ 65๋ฒ๋ถํฐ 90๋ฒ๊น์ง๊ฐ A๋ถํฐ Z๋ค. ํ์ง๋ง ๋ฌธ์ ์์๋ A์ ์ธ๋ฑ์ค๋ฅผ 1๋ก ํ์ผ๋ฏ๋ก 64๋ฒ์งธ๋ถํฐ๋ก ์ค์ ํจ.
2. words ์์ ๋ฐฐ์ด ์ค ๊ฐ์ฅ ๊ธด ๋ฌธ์๊ธธ์ด์์ 1์ ๋บ ์- > var maxCount = 0
3. msg๋ฅผ map์ผ๋ก ๋๋ ์ค ๋ณ์ -> let map = msg.map{String($0)}
4. ํ์ฌ ๋ฌธ์์ ์ธ๋ฑ์ค ๋ณ์ - > var x = 0
5. ์ถ๋ ฅ๋ ๋ฒํธ๋ฅผ ์ ์ฅํ ๋ฐฐ์ด - > var answer = [Int]()
while๋ฌธ์ ์ด์ฉํ์ฌ ๋ฌธ์ ์ ์ฒด๋ฅผ ์ํํฉ๋๋ค. -> while x <= map.count-1 {
for in stride ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ words์ ๊ฐ์ฅ ๊ธด ๋ฌธ์๊ธธ์ด -1 ๋ถํฐ 0๊น์ง ๋ฐ๋ณตํด์ค -> for j in stride(from: maxCount, to: -1, by: -1) {
๋ง์ฝ x + j ๊ฐ ์ ์ฒด ๋ฌธ์๋ณด๋ค ๊ธธ๋ฉด continue๋ก j์ ๊ธธ์ด๋ฅผ ์ค์ฌ์ค๋ค. -> if x+j > map.count-1 { continue }
๊ทธ๋ฆฌ๊ณ x๋ถํฐ x+j๊น์ง์ ๋ฌธ์๊ฐ words์์ ํฌํจ๋์ด ์๋ค๋ฉด -> if words.contains(map[x...x+j].joined()) {
words์์ x๋ถํฐ j๊น์ง์ ๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ์์๋ด์ด answer์ ์ถ๊ฐํด์ค๋ค. -> answer.append(words.firstIndex(of: map[x...x+j].joined())!)
x๋ถํฐ j๊น์ง ๋ฌธ์ ๋ค์์ด ์ ์ฒด ๋ฌธ์๋ณด๋ค ๊ธธ์ง ์๋ค๋ฉด -> if x+j+1 <= map.count-1 {
x๋ถํฐ j+1 ๋ฌธ์๋ฅผ words์ ์ถ๊ฐํด์ค๋ค. -> words.append(map[x...x+j+1].joined())
์ถ๊ฐ๋ ๋ฌธ์์ ๊ธธ์ด์ ํ์ฌ ๊ฐ์ฅ ๊ธด ๋ฌธ์์ ๊ธธ์ด๋ฅผ ๋น๊ตํด์ ๋ ๊ธด ๊ธธ์ด๋ฅผ maxCount๋ก ์ค์ - > maxCount = max(maxCount, j+1)
x์ ์ธ๋ฑ์ค๋ฅผ x+j+1๋ก ๋ฐ๊ฟ์ค - > x = x+j+1
x์ ์ธ๋ฑ์ค๊ฐ ์ ์ฒด ๋ฌธ์๋ณด๋ค ์ปค์ ธ while๋ฌธ์ ํ์ถํ์ ๋ answer์ ์ ์ฅ๋ ๊ฒ์ ๋ฐํํด์ค - > return answer
Source Code
'๐ Problem Solution > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2018 KAKAO BLIND RECRUITMENT[3์ฐจ] ๋ฐฉ๊ธ๊ทธ๊ณก Swift (0) | 2020.11.29 |
---|---|
2018 KAKAO BLIND RECRUITMENT [3์ฐจ] ํ์ผ๋ช ์ ๋ ฌ Swift (0) | 2020.11.19 |
ํ๋ก๊ทธ๋๋จธ์ค ์๊ฐ ์ฝ๋ ์ฑ๋ฆฐ์ง ์์ฆ1 ์ด์ง ๋ณํ Swift (0) | 2020.11.15 |
2018 KAKAO BLIND RECRUITMENT[1์ฐจ] ํ๋ ์ฆ4๋ธ๋ก Swift (0) | 2020.11.14 |
ํ๋ก๊ทธ๋๋จธ์ค ์ง์ง์ด ์ ๊ฑฐํ๊ธฐ Swift (0) | 2020.11.12 |
๋๊ธ