[ํ๋ก๊ทธ๋๋จธ์ค] 1์ฐจ ๋น๋ฐ์ง๋
1. ๋ฌธ์ ๋งํฌ
https://school.programmers.co.kr/learn/courses/30/lessons/17681
2. ์ฝ๋
func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] {
var answer: [String] = []
var count : Int = 0
var str : String = ""
func makeMap(arr: [Int]) -> [Int]{
var mapArr : [Int] = []
for i in arr{
var tempArr : [Int] = [] // ํ๋์ฉ ๊ฒฐ๊ณผ๊ฐ์ ๋ฃ๊ธฐ ์ํด ์์๋ก ๋ง๋ ๋ฐฐ์ด
var share : Int = i // ๋ชซ
var remain : Int = 0 // ๋๋จธ์ง
while share != 0{ //2๋ก ๊ณ์ ๋๋๊บผ์ฌ์ ๋ง์ง๋ง์ 0์ด๋๋ค.
remain = share % 2 // 2๋ก ๋๋๋ฉด 0,1๋ก ๋๋จธ์ง๊ฐ ๋์ด
share = share / 2 // ๊ณ์ ๋๋ ์ผ ํด์
tempArr.append(remain) // remain ๊ฒฐ๊ณผ๊ฐ์ ๋ฐฐ์ด์ ๋ฃ์ด์ค
}
if tempArr.count < n { // 1,2(2),4(3),8(4),16(5),64(6)
// ๋ฐฐ์ด์์ ๊ฐฏ์ ์ธ์ ๋ถ์กฑํ ๋ถ๋ถ 0์ผ๋ก ์ฑ์ฐ๊ธฐ
for _ in 0..<n - tempArr.count{ // ๋ถ์กฑํ ๊ฐฏ์๋งํผ ๋ฐ๋ณต ๋ฐฐ์ด ๋ค์๋ค๊ฐ 0์ฑ์ฐ๊ธฐ
tempArr.append(0)
}
}
tempArr = tempArr.reversed() // ๋ฐฐ์ด ๊ฐ์ ๋ฐ์ ์ํค๊ธฐ
mapArr.append(contentsOf: tempArr)
}
return mapArr
}
// ๋ฉ์๋ ํธ์ถํด์ ๋ฐํ ๋ฐ์ ๋ฐฐ์ด์ ๊ฐ์ด zip() ์ด์ฉํด์ ๋๋ ค์ ํ์ธ
for (arr1,arr2) in zip(makeMap(arr: arr1), makeMap(arr: arr2)){
count += 1 // ์นด์ดํ
if arr1 == 1 || arr2 == 1 { // ๋์ค ํ๋๋ผ๋ 1์ด๋ผ๋ฉด ๋ฒฝ
str += "#"
}else{ // ์๋์๋ ๋๋ค 0 ์ด๋ฏ๋ก ๋น์นธ
str += " "
}
if count == n { // n๊ฐ์ฉ ์๋ผ์ผํด์
answer.append(str) // ์ ๋ต ๋ฐฐ์ด์ ๋ฃ๊ณ
count = 0 // ์นด์ดํ
0์ผ๋ก ์ค์
str = "" // ๋ฌธ์์ด ์ด๊ธฐํ
}
}
return answer
}
3. ์ฝ๋ ์ค๋ช
makeMap ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง arr1๊ณผ arr2๋ฅผ ์ด์ง์๋ก ๋ณํํ์ฌ ๋ฐฐ์ด๋ก ๋ง๋ค์์ต๋๋ค.
์ด์ง์๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ๊ฐ ์ซ์๋ฅผ ๊ณ์ํด์ 2๋ก ๋๋๊ณ , ๋๋จธ์ง๋ฅผ ๋ฐฐ์ด์ ์ ์ฅํ์ฌ ์ด์ง์๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ์ด์ง์์ ๊ธธ์ด๊ฐ n๋ณด๋ค ์์ ๋๋ 0์ผ๋ก ์ฑ์์ฃผ๊ณ , ๋ฐฐ์ด์ ๋ฐ์ ์์ผ ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ์ถ๊ฐํ์์ต๋๋ค.
๋ ๋ฐฐ์ด์ ๋์์ ์ํํ๊ธฐ ์ํด zip ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํจ๊ป ๋ฐ๋ณต๋ฌธ์ ์คํํ์ต๋๋ค.
๋ง์ฝ arr1 ๋๋ arr2์ ๊ฐ์ด 1์ด๋ผ๋ฉด ๋ฒฝ์ ์๋ฏธํ๋ฏ๋ก "#"์ ์ถ๊ฐํด์ค๋๋ค.
๋งค ์ํ๋ง๋ค ๋ฌธ์์ด์ str์ ์ ์ฅํ๋ ์ด์ ๋ ๊ฐ ์ซ์๋ง๋ค ๊ธธ์ด๊ฐ n์ธ ๋ฌธ์์ด์ ์์ฑํด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค.
count๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ํ์ธํ๊ณ , ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ์ถ๊ฐํ ํ ์ด๊ธฐํํฉ๋๋ค.