2024. 3. 8. 09:59, ๐กAlgorithm
๋ฐ์ํ
๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/12947
์ ๊ทผ
- ๋ ๋ฌธ์ ๋ฅผ ์๋ชป ์ดํดํ๊ณ ํ๊ธฐ ์์ํ๋ค. ๋ฌธ์ ์ ๋๋ก ์ฝ๋ ๋ฅ๋ ฅ์ด ํ์
- ํด๋น ์ซ์๊ฐ ๊ฐ์ง๋ ์๋ฆฌ ๊ฐ์๋ก ๋๋์ด์ง๋๋ ๋ฌธ์ ์ธ์ง ์์์ x๋ฅผ ๋ฐฐ์ด๋ก ์ชผ๊ฐ ๋ฃ์ด์ size๋ก ๋ฐฐ์ด ํฌ๊ธฐ๋ฅผ ์ฐ ๋ค์,
if๋ฌธ x % (๋ฐฐ์ด ํฌ๊ธฐ)๊ฐ 0์ด๋ ์๋๋์ ๋ฐ๋ผ true์ false๋ก ์ถ๋ ฅํ๋ฉด ๋ ๊ฒ ๊ฐ์๋ค.
// ์ด๊ธฐ ๊ตฌ์, ์ค๋ฅ ์ฝ๋
class Solution {
fun solution(x: Int): Boolean {
var Array : IntArray = x.toString()
.split("")
.filter{it != ""}
.map {it.toLong()}
.toIntArray()
var size = Array.size
if(x % size == 0) { return true }
else { return false }
}
}
- ์๊ณ ๋ณด๋ ์๋ฆฌ์ ์๋ ์๋ง๋ค ๊ฐ๊ฐ์ ๋ค ๋ํ๊ณ ๊ทธ๊ฑธ ๋น๊ตํ๋ ๊ฑฐ์๋ค.
// 4๊ฐ ์ค 2๊ฐ ์ค๋ฅ
class Solution {
fun solution(x: Int): Boolean =
if(x % (x.toString().map{it.toInt()}.sum()) == 0) true else false
}
- ๊ทธ๋์ ์์ ๊ฐ์ด if๋ฌธ์ผ๋ก ๋ถ๊ธฐ์ํค๊ณ ๊ตฌํํ๋๋ฐ 2๊ฐ์ ํ ์คํธ๋ฅผ ์คํจํ๋ค.
์ฑ๊ณต ์ฝ๋
class Solution {
fun solution(x: Int): Boolean =
if(x % (x.toString().map{it - '0'}.sum()) == 0) true else false
}
์ค๋ช ๋ฐ ์๋ฌธ
- x์ ๊ฐ ์๋ฆฌ์๋ฅผ ๋ํ ๊ฐ์ ๋๋ 0์ด ๋๋ฉด true, ์๋๋ฉด false๋ฅผ ์ฒ๋ฆฌํ๋ค.
- ๊ฐ ์๋ฆฌ์๋ฅผ ๋ํ๊ธฐ ์ํด์ x๋ฅผ string์ผ๋ก ๋ฐ๊พธ๊ณ , map๊ณผ sum์ ์ด์ฉํด ๊ฐ๊ฐ์ ์๋ฆฌ๋ฅผ ์ซ์๋ก ๋ณํํ์ฌ ๋ํ๋ค.
- ๊ทธ๋ฐ๋ฐ ์ดํด๊ฐ ์ ๋๋ ๋ถ๋ถ์ด ์์๋ค. ์ด๊ธฐ์ ๋ด๊ฐ ๊ตฌ์ํ๋ ๊ฒ์ด ์ ํ๋ ธ์๊น?
- map ์์์ it - '0'์ ์ ์จ์ผํ๋์ง ๊ถ๊ธํ๋๋ฐ ์ฐพ์๋ณด๋ ๋ด์ฉ์ ์ด๋ฌํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์ '0'์ ASCII ์ฝ๋์์ ์ซ์ 48์ ๋ํ๋ธ๋ค. ๋ฐ๋ผ์ ๋ฌธ์ '0'์์ ๋ค๋ฅธ ๋ฌธ์๋ฅผ ๋บ์ผ๋ก์จ ํด๋นํ๋ ์ซ์๋ฅผ ์ป์ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ฌธ์ '3'์ ASCII ์ฝ๋ ๊ฐ์ 51์ด๋ฉฐ, ๋ฌธ์ '0'์ ASCII ์ฝ๋ ๊ฐ์ 48์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก '3' - '0'์ 51 - 48์ด ๋์ด 3์ด ๋๋ค. ๋ฐ๋ผ์ it - '0'์ ๋ฌธ์๋ฅผ ํด๋นํ๋ ์ซ์๋ก ๋ณํํ๋ ๊ณผ์ ์ด๊ณ , ์ด๋ฅผ ํตํด ๋ฌธ์์ด๋ก ํํ๋ ์ซ์๋ฅผ ์ซ์๋ก ๋ณํํ ์ ์๋ ๊ฑฐ๋ค. - ๊ทธ๋ฌ๋ ์ map{it.toInt()}๋ ์๋๊ณ map{it - '0'}์ ๋๋ ๊ฑด์ง...
๋ ๋ค ๋๊ฐ์ด ๋ฌธ์๋ฅผ ์ซ์๋ก ๋ณํํ๋ ๊ณผ์ ์๋๊ฐ?
์ ๊ตณ์ด ์์คํค์ฝ๋๋ฅผ ์ด์ฉํ ๊ณ์ฐ์ ํ๋์ง ๊ต์ฅํ ์๋ฌธ์ด ๋ค์๋ค.
- it.toInt()๊ฐ ์ ๋๋ ์ด์ ์ ๋ํด ํํฐ๋์ด ์ ์๋ ค์ฃผ์ ์ ๋๋์ด ์ดํดํ ์ ์์๋ค...
- ํ๋ก๊ทธ๋๋จธ์ค์์ ์ค๋ฅ๊ฐ ๋จ์ง ์๊ณ , ๋ก๊ทธ๋ ๋จ์ง ์์ ํ์ธํ ์ ์์๋๋ฐ ์๋๋ก์ด๋ ์คํ๋์ค๋ก ์ ์ ์์๋ค.
- ์ผ๋จ map์ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋จ๋ฉด ์๋๋ก์ด๋ ์คํ๋์ค์์ ctrl+ํด๋ฆญ์ผ๋ก map์ ๋ํด ์ ํํ ํ์ธํ ์ ์์ผ๋ ์ง์ ํ์ธํด ๋ณด๋ ๋ฐฉ๋ฒ์ด ์ ์ผ ์ข๋ค.
- map{it.toInt()}๊ฐ ์ค๋ฅ๊ฐ ๋๋ ์ด์ ๋ String์ map์ ์ฐ๋ฉด it์ด String์ด ์๋ Char๋ก ๋ค์ด์์๋ค.
- ๋ฐ๋ผ์ it.toString().toInt()๋ก ํ๋ฉด ํด๊ฒฐ ๋๋ค. - Char์์ ์ซ์๋ก ๋ณํํ๋๊ฑด ๊ถ์ฅํ์ง ์๋๋ค.
- ์ด์ : https://kotlinworld.com/436
๋ค๋ฅธ ๋ฐฉ๋ฒ
class Solution {
fun solution(x: Int): Boolean =
x % x.toString().sumBy { it.toInt() - 48 } == 0
}
- ์ ์ด์ ํจ์์ ๋ฐํ๊ฐ์ด Boolean์ด๊ธฐ์ ๋ฐ๋ก ์กฐ๊ฑด๋ฌธ ์ฒ๋ฆฌ ์์ด = ์ผ๋ก ๊ฐ์ ์ฒ๋ฆฌํด์คฌ๋ค.
- sum ๋์ sumBy๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๊ฐ์ ๋ํด์ฃผ์๋ค.
- ์๋ ๊ทผ๋ฐ it.toInt()๋ฅผ ์ด๋ป๊ฒ ์ด ๊ฑธ๊น................................. ์๋ฌด๋๋ ์ด ๋ถ๋ถ์ ๋ํด์ ์ผ๋จ ๊ณผ์ ๋ถํฐ ์ ์ถํ๊ณ ๋ ์๊ฐํด๋ด์ผ๊ฒ ๋ค............
class Solution {
fun solution(x: Int): Boolean = if (x % digitSum(x) == 0) true else false
}
fun digitSum(number: Int): Int {
var sum = 0
var n = number
while (n != 0) {
sum += n % 10 // ๊ฐ ์๋ฆฟ์๋ฅผ ๋ํจ
n /= 10 // ๋ค์ ์๋ฆฟ์๋ก ์ด๋
}
return sum
}
- ๊ฐ์ฅ ์ ์์ ์ธ ํ์ด ๋ฐฉ๋ฒ ๊ฐ๋ค.
- %10 ๊ณผ /10์ ๋ฐ๋ณตํ๋ฉฐ ๊ฐ ์๋ฆฟ์๋ฅผ ๋ํ๋ ๋ฐ๋ณต๋ฌธ์ ๋ฃ์ด ์ฒ๋ฆฌํ๋ค.
๋ฐ์ํ
๐ฌ C O M M E N T