2024. 3. 15. 16:20, ๐กAlgorithm
๋ฐ์ํ
๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/12948
์ ๊ทผ
- 1. phone_number๋ฅผ ํ๋์ฉ ์๋ผ์ ๋ฐฐ์ด์ ๋ฃ๋๋ค.
- 2. return ๋ฐฐ์ด์ ๋ง๋ค์ด 0๋ถํฐ ๋ฐฐ์ด์ ํฌ๊ธฐ-5๋งํผ *์ ๋ฃ๋๋ค.
- 3. for๋ฌธ์ ๋๋ ค ๋ฐฐ์ด์ ํฌ๊ธฐ -4๋ถํฐ ๋ฐฐ์ด์ ํฌ๊ธฐ -1๊น์ง ๋ฐ๋ณตํ๋ฉฐ ์ถ๋ ฅํ๋ค.
- 4. ํด๋น ๋ด์ฉ์ ๋ชจ๋ ๋ถ์ฌ String์ผ๋ก ์ถ๋ ฅํ๋ค.
// ๊ตฌ์, ๋๊ฐ ์ด๋ฐ ๋๋์ด์ง๋ง ๋ฌธ๋ฒ ์ค๋ฅ ๋ค์
class Solution {
fun solution(phone_number: String): String {
var numberArray = phone_number.split("")
var returnArray = charArrayOf()
for(i in numberArray.size-5) {
var returnArray = returnArray + "*"}
var f = numberArray.size-4
for(f in numberArray.size-1) {
returnArray += numberArray[f]}
return returnArray.toString()
}
}
- ๋ฐฉ์์ ๋ง์์ผ๋, ๋ฌธ๋ฒ์ด ์์ฐฝ ํ๋ ธ๋ค. ์ด ์ฝ๋์ ๋ฌธ์ ์ ์ ์๋์ ๊ฐ๋ค.
- 1. split ํจ์ ์๋ชป ์ฌ์ฉ
split์ ๋ฌธ์์ด์ ๋ถํ ํ์ฌ ๋ฐฐ์ด๋ก ๋ฐํํ๋๋ฐ, ๋น ๋ฌธ์์ด ""์ ๊ธฐ์ค์ผ๋ก ๋ถํ ํ๋ฉด ๋ฌธ์์ด์ด ๊ฐ ๋ฌธ์ ๋จ์๋ก ๋ถํ ๋๋ค. ์ฆ, "1234567890"์ด๋ผ๋ ๋ฌธ์์ด์ split("")๋ก ๋ถํ ํ๋ฉด ๋น ๋ฌธ์์ด์ ํฌํจํ์ฌ ["", "1", "2", ..., "9", "0"]๊ณผ ๊ฐ์ ๋ฐฐ์ด์ด ์์ฑ๋๋ค. ๋ฐ๋ผ์ phone_number.split("")๋ฅผ ์ฌ์ฉํ๋ ๋์ phone_number.toCharArray()๋ฅผ ์ฌ์ฉํ๋ค. - 2. for๋ฌธ ์๋ชป ์ฌ์ฉ
for๋ฌธ์ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ์ด ํ๋ ธ๋ค. ๋ฃจํ๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ for (i in 0 until numberArray.size - 4) ๋๋ for (i in numberArray.size - 5 until numberArray.size - 1)๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค. ์ฆ, i in 0 until 10 ์ ํํ๋ก ์ฌ์ฉํด์ผํ๋ค.
๋ํ CharArray์ *๋ฅผ ๋ฃ๊ณ ์ถ๋ค๋ฉด " "(๋๋ธ์ฟผํฐ)๊ฐ ์๋๋ผ, ' '(์ฑ๊ธ์ฟผํฐ)์ ๋ฃ์ด์ค์ผ ํ๋ค. - 3. returnArray ๋ฐฐ์ด ์ด๊ธฐํ ์๋ชป ์ฌ์ฉ
Kotlin์์ ๋ฐฐ์ด์ ์ด๊ธฐํํ ๋๋ ๋น ๋ฐฐ์ด์ ์์ฑํ๊ณ ๊ฐ์ ํ ๋นํ๋ ๊ฒ์ด ์๋๋ผ, arrayOf() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๋ฐฐ์ด์ ์์ฑํด์ผ ํ๋ค. (val returnArray = CharArray(numberArray.size)) - 4. ๋ฆฌํด๊ฐ์์์ toString() ์๋ชป ์ฌ์ฉ
returnArray.toString()์ ํธ์ถํ๋ ๊ฒ์ ์๋ชป๋๋ค. ์ด๊ฑด ๋ฐฐ์ด์ ๋ฌธ์์ด๋ก ๋ณํํ๋ ๊ฒ์ ๋ฐฐ์ด์ ๋ด์ฉ์ด ์๋๋ผ ๋ฐฐ์ด์ ๋ฌธ์์ด ํํ์ ๋ฐํํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋์ returnArray.joinToString("")๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด์ ์์๋ฅผ ๋ฌธ์์ด๋ก ๊ฒฐํฉํ๋ค.
์ฑ๊ณต ์ฝ๋
class Solution {
fun solution(phone_number: String): String {
val numberArray = phone_number.toCharArray()
val returnArray = CharArray(numberArray.size)
for(i in 0 until numberArray.size - 4) {
returnArray[i] = '*' }
for(i in numberArray.size-4 until numberArray.size) {
returnArray[i] = numberArray[i]}
return returnArray.joinToString("")
}
}
์ค๋ช
- ์ ๋ ฅ๊ฐ phone_number๋ฅผ ํ๋์ฉ ์๋ผ์ ๋ฐฐ์ด(numberArray)์ ๋ฃ์
- ์ ๋ต์ ๋ฃ์ ๋ฐฐ์ด(returnArray)์ ๋ง๋ค์ด, numberArray์ ํฌ๊ธฐ๋งํผ ๋ฐฐ์ด์ ์ด๊ธฐํ
- numberArray ๋ฐฐ์ด์ ํฌ๊ธฐ - 5๊น์ง * ์ ์ ๋ต ๋ฐฐ์ด(returnArray)์ ๋ฃ์
- numberArray ๋ฐฐ์ด์ ํฌ๊ธฐ - 4๋ถํฐ -1๊น์ง์ ์์ ๊ทธ๋๋ก ์ ๋ต ๋ฐฐ์ด(returnArray)์ ๋ฃ์
- ์ ๋ต ๋ฐฐ์ด(returnArray)์ ๋ชจ๋ ๋ถ์ฌ String์ผ๋ก ์ถ๋ ฅ
- ๋ค๋ง ์ข ๋ณต์กํ๊ฒ ํผ ํธ์ด๋ผ, ์๋์ ๋ด์ฉ๋ค์ ์ฐธ๊ณ ํ๋ ๊ฒ ์ข๋ค.
๋ค๋ฅธ ๋ฐฉ๋ฒ
class Solution {
fun solution(phone_number: String): String {
return "${"".padStart(phone_number.length - 4, '*')}${phone_number.takeLast(4)}"
}
}
- padStart()์ takeLast()๋ฅผ ์ด์ฉํ ๊ฐ๋จํ ํ์ด์ด๋ค.
- ๐ก padStart(length: Int, padChar: Char): String
- ๋ฌธ์์ด์ ์์ ๋ถ๋ถ์ ์ง์ ๋ ๊ธธ์ด๋งํผ์ ๋ฌธ์(padChar)๋ฅผ ์ถ๊ฐํ์ฌ ์ฃผ์ด์ง ๊ธธ์ด์ ๋ง์ถ๋ ์ญํ
- ๋น ๋ฌธ์์ด ""์ ํจ๋ฉ์ด ์ถ๊ฐ๋ ์์น (์ด๋ค ๋ฌธ์์ด์ด ์ค๋๋ผ๋ ๊ฒฐ๊ณผ์๋ ์ํฅ์ ์ฃผ์ง ์๊ธฐ์ ""์ ์ฌ์ฉํ๋ ๊ฒ ์ผ๋ฐ์ )
- "".padStart(phone_number.length - 4, '*') ๋ถ๋ถ์ ''์ ์ ํ๋ฒํธ์ ๊ธธ์ด์์ ๋ง์ง๋ง 4์๋ฆฌ๋ฅผ ์ ์ธํ ๋งํผ ์ถ๊ฐํ ๋ฌธ์์ด์ ์์ฑ - ๐ก takeLast(n: Int): String
- ๋ฌธ์์ด์ ๋ง์ง๋ง n๊ฐ์ ๋ฌธ์๋ฅผ ๋ฐํ
- ์ด ์ฝ๋์์๋ phone_number.takeLast(4)๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฒํธ์ ๋ง์ง๋ง 4์๋ฆฌ๋ฅผ ์ถ์ถ
class Solution {
fun solution(phone_number: String): String {
var answer = ""
for((i, c) in phone_number.withIndex()) {
if(phone_number.length - 4 <= i) {
answer += c
} else {
answer += '*'
}
}
return answer
}
}
- withIndex()๋ฅผ ์ด์ฉํ ํ์ด์ด๋ค.
- phone_number.withIndex()
- ๋ฌธ์์ด phone_number์ ๊ฐ ๋ฌธ์์ ํด๋น ๋ฌธ์์ ์ธ๋ฑ์ค๋ฅผ ์ํํ ์ ์๋ ๋ฐ๋ณต์(iterator)๋ฅผ ๋ฐํ
- ์ด ๋ฐ๋ณต์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฌธ์(์๋ฆฌ๋ฉํธ)์ ํด๋น ์ธ๋ฑ์ค๋ฅผ ๋์์ ๊ฐ์ ธ์ฌ ์ ์์ - for ((i, c) in phone_number.withIndex()) { ... }
- phone_number์ ๊ฐ ๋ฌธ์(c)์ ํด๋น ๋ฌธ์์ ์ธ๋ฑ์ค(i)๋ฅผ ๊ฐ์ ธ์์ ๋ฐ๋ณต์ ์ผ๋ก ์ฒ๋ฆฌ
- ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ฌ ์ ํ๋ฒํธ์ ๊ฐ ๋ฌธ์์ ํด๋น ์ธ๋ฑ์ค์ ์ ๊ทผ
๐ก String์ ๋ฐ๋ก withIndex() ๋ lastIndex()๋ฅผ ์ด๋ป๊ฒ ์ฐ๋ ๊ฑธ๊น?
- String์ Array๋ List ํํ๊ฐ ์๋๋ฐ ์ ๋ฐ๋ก ์ธ๋ฑ์ค๊ฐ์ ์ฐพ์ ์ ์๋์ง ๊ถ๊ธํ๋ค.
- ๋ฌธ์์ด(String)์ ๋ด๋ถ์ ์ผ๋ก ๋ฌธ์(Char)์ ๋ฐฐ์ด๋ก ํํ๋๋ค๊ณ ํ๋ค.
๋ฐ๋ผ์ ๊ฐ ๋ฌธ์๋ ํด๋น ๋ฌธ์์ด์์์ ์์น๋ฅผ ๋ํ๋ด๋ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ - ์ด๋ ์ฝํ๋ฆฐ ๋ฟ๋ง ์๋๋ผ, Java, Python, C#, JS ๋ชจ๋ ๋์ผํ๋ค๊ณ ํ๋ค.
- ๋ฐ๋ผ์, ๊ตณ์ด ๋ฐฐ์ด๋ก ๋ณํํด์ ๋ฌธ์ ๋ฅผ ํ ์ด์ ๊ฐ ์์๋ค.
class Solution {
fun solution(phone_number: String): String {
var answer = ""
val last = phone_number.lastIndex
for (i in 0..last - 4) answer += "*"
return answer + phone_number.slice(last - 3..last)
}
}
- .lastIndex๋ฅผ ์ด์ฉํด ๋ง์ง๋ง ์ธ๋ฑ์ค๋ฅผ ๊ตฌํ๊ณ , ์ด๋ฅผ ์ด์ฉํด ๋ฆฌํดํ ๋ฐฉ๋ฒ์ด๋ค.
- phone_number.slice(last - 3..last)์์์ last - 3 .. last๋ ๋ง์ง๋ง 4์๋ฆฌ์ ์ธ๋ฑ์ค ๋ฒ์๋ฅผ ๋ํ๋ธ๋ค.
- slice(indices: IntRange): CharSequence
- ๋ฌธ์์ด์์ ์ง์ ๋ ๋ฒ์์ ๋ฌธ์๋ค์ ์ถ์ถํ์ฌ ์๋ก์ด CharSequence(์ผ๋ฐ์ ์ผ๋ก String)๋ก ๋ฐํ
- ์ธ๋ฑ์ค ๋ฒ์๋ IntRange๋ก ์ง์
- slice() ํจ์๋ ์๋ณธ ์ปฌ๋ ์ ์ ๋ณ๊ฒฝํ์ง ์๊ณ ์๋ก์ด ์ปฌ๋ ์ ์ ๋ฐํ (์๋ณธ ์ปฌ๋ ์ ์ ๊ทธ๋๋ก ์ ์ง)
class Solution {
fun solution(phone_number: String): String {
var length = phone_number.length - 4
var blind = ""
for (i in 0 until length) {
blind += "*"
}
return blind + phone_number.substring(length, length + 4)
}
}
- .substring()์ ์ด์ฉํ ํ์ด๋ค.
- substring(startIndex: Int): ์์ ์ธ๋ฑ์ค๋ถํฐ ๋ฌธ์์ด์ ๋๊น์ง์ ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐํ
- substring(startIndex: Int, endIndex: Int): ์์ ์ธ๋ฑ์ค๋ถํฐ ์ข ๋ฃ ์ธ๋ฑ์ค ์ ๊น์ง์ ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐํ (until ์ฒ๋ผ) - phone_number.substring(length, length + 4)
- length๋ถํฐ length + 4๊น์ง์ ๋ถ๋ถ ๋ฌธ์์ด์ ์ถ์ถํ์ฌ ๋ฐํ
๋ฐ์ํ
๐ฌ C O M M E N T