๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿงฉ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/๐Ÿต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด(Java)

์ž์—ฐ์ˆ˜ ๋’ค์ง‘์–ด ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค๊ธฐ

by carrot0911 2024. 11. 3.

๋ฌธ์ œ ์„ค๋ช…

https://school.programmers.co.kr/learn/courses/30/lessons/12932

์ž์—ฐ์ˆ˜ n์„ ๋’ค์ง‘์–ด ๊ฐ ์ž๋ฆฌ ์ˆซ์ž๋ฅผ ์›์†Œ๋กœ ๊ฐ€์ง€๋Š” ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๋ฆฌํ„ดํ•ด์ฃผ์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด n์ด 12345์ด๋ฉด [5, 4, 3, 2, 1]์„ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.

์ œํ•œ ์‚ฌํ•ญ

  • n์€ 10,000,000,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

n return
12345 [5, 4, 3, 2, 1]

 

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ

์ฒ˜์Œ์—๋Š” ์ˆซ์ž๋ฅผ 10์œผ๋กœ ๋‚˜๋ˆ ์„œ ๋‚จ์€ ๋‚˜๋จธ์ง€๋ฅผ ๋ฐฐ์—ด์— ์ž…๋ ฅํ•˜๋ฉด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์ ์ด ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ์ •ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ ๊ทธ ๊ธธ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜.... ๊ฐ€ ๋ฌธ์ œ์˜€๋‹ค...... ๐Ÿ˜”๐Ÿ˜” ๊ทธ๋ž˜์„œ while๋ฌธ์„ ์ด์šฉํ•ด์„œ ์ฐจ๋ก€๋Œ€๋กœ ํ•˜๋‚˜์”ฉ ์ง‘์–ด๋„ฃ์œผ๋ฉด ๋˜๊ฒ ๋‹ค ์ƒ๊ฐํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ง  ํ›„ ์‹คํ–‰ํ–ˆ๋”๋‹ˆ ๋ณด๋ž€ ๋“ฏ์ด ๋นจ๊ฐ„ ๊ธ€์”จ๋กœ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค๋Š” ์ฝ”๋“œ๊ฐ€ ๋‚˜์™”๋‹ค ใ… ใ… 
๊ณ„์† ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด์„œ ์ •๋‹ต์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—๋Ÿฌ๋งŒ ๋‚˜์™€์„œ.. ๊ฒฐ๊ตญ์€ ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ํ’€์ด๋ฅผ ํ™•์ธํ–ˆ๋Š”๋ฐ ๋‚˜๋ž‘์€ ์ „ํ˜€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ‘ผ ๊ฒƒ์„ ๋ณด๊ณ  ์ž˜ ์ฐธ๊ณ ํ•ด์„œ ์ •๋ฆฌํ•ด๋‘ฌ์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๐Ÿคจ๐Ÿคจ๐Ÿคจ

์ •๋‹ต ์ฝ”๋“œ

class Solution {
    public int[] solution(long n) {
        String str = Long.toString(n);  //long ํƒ€์ž…์˜ n์„ String ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ!!!
        int[] answer = new int[str.length()];  //์ •๋‹ต์„ ๋„ฃ์„ answer ๋ฐฐ์—ด ์ƒ์„ฑ!
        
        for (int i = str.length() - 1; i >= 0; i--) {  //๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๋ฌธ์ œ ํ•ด๊ฒฐ. i์˜ ๊ฐ’์„ ์ตœ๋Œ€๊ฐ’์—์„œ ๋‚ด๋ ค์˜ค๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ž‘์„ฑ!
            answer[str.length() - i - 1] = str.charAt(i) - '0';  //answer์˜ ๊ฐ ์ธ๋ฑ์Šค์— ASCII ์ฝ”๋“œ๋กœ ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ์ž…๋ ฅ!
        }
        
        return answer;
    }
}

์ฝ”๋“œ ์„ค๋ช…

์šฐ์„  Long.toString(n); ์„ ํ†ตํ•ด long ํƒ€์ž…์˜ n์„ String ํƒ€์ž…์œผ๋กœ ํ˜•๋ณ€ํ™˜์„ ํ•ด์ฃผ์—ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ •๋‹ต์„ ์ถœ๋ ฅํ•˜๋Š” answer ๋ณ€์ˆ˜์— ๋ฐฐ์—ด์„ ์„ ์–ธํ•ด์ฃผ๊ณ , ๊ทธ ๊ธธ์ด๋Š” String str์˜ ๊ธธ์ด๋กœ ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค.

๊ทธ ํ›„์— ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋งŒํผ ๋ฐ˜๋ณต๋ถ„์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ,
์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํฌ์ธํŠธ๋Š” ์ˆœ์„œ๋ฅผ ๋’ค์ง‘์–ด์„œ ๋ฐ˜๋ณต์„ ์‹คํ–‰์„ ํ•ด์ค€๋‹ค๋Š” ์ ์ด๋‹ค!!

int i = str.length() - 1
String ํƒ€์ž…์˜ str ๊ธธ์ด์˜ -1๋งŒํผ ๋ณ€์ˆ˜ i์˜ ๊ฐ’์œผ๋กœ ์ž…๋ ฅํ•ด ์ค€๋‹ค.

answer[str.length() - i - 1]
answer ๋ฐฐ์—ด์—๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฐ’์ด ์ž…๋ ฅ๋  ์ˆ˜ ์žˆ๋„๋ก str.length() - i - 1์„ ํ•ด์ค€๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฌธ์ž์—ด์„ ๋’ค์ง‘์–ด์„œ ๋ฐ˜๋ณตํ•˜์ง€๋งŒ answer ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ 0, 1, 2, ... ์ˆœ์„œ๋กœ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋˜๊ณ  ๊ฐ’์ด ์ž…๋ ฅ๋œ๋‹ค.

str.charAt(i) - '0'
charAt(i)๋Š” i๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” String ํƒ€์ž…์˜ ๋ฌธ์ž์—ด์„ char ํƒ€์ž…์œผ๋กœ ํ•œ ๊ธ€์ž์”ฉ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

์ •๋‹ต์„ ์ž…๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฌธ์ž์—ด์ด ์•„๋‹Œ intํ˜•์œผ๋กœ ์ž…๋ ฅํ•ด์•ผ ํ•˜๋Š”๋ฐ, charAt(i)๋Š” char ํƒ€์ž…์œผ๋กœ ์ถœ๋ ฅ์ด ๋˜์„œ ์ •๋‹ต์ด ๋˜์ง€ ๋ชปํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ char ํƒ€์ž…์„ int ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ASCII ์ฝ”๋“œ ๊ฐ’์œผ๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด n์˜ ๊ฐ’์ด "123"์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, charAt(0)์˜ ๊ฐ’์€ '1'์ด ๋œ๋‹ค. '1'๋กœ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ int ํƒ€์ž…์˜ 1๋กœ ๋ฐฐ์—ด์— ์ž…๋ ฅ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— '1'์„ int ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ฒŒ ๋˜๋ฉด 49์˜ ๊ฐ’์„ ์–ป๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ํ•„์š”ํ•œ ๊ฐ’์€ 1์ด๊ธฐ ๋•Œ๋ฌธ์— 48์„ ๋นผ์ค˜์•ผ ํ•˜๋Š”๋ฐ '0'์˜ ASCII ์ฝ”๋“œ ๊ฐ’์ด 48์ด๊ธฐ ๋•Œ๋ฌธ์— - '0'์„ ๋’ค์— ๋ถ™์—ฌ์„œ ๋ฐ˜๋ณตํ•˜๋ฉด ์ฐจ๋ก€๋Œ€๋กœ ์›ํ•˜๋Š” ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์ •๋‹ต ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์ƒ๊ฐํ•˜๊ฒŒ ๋œ ๋‹ค๋ฅธ ํ’€์ด

class Solution {
    public long[] solution(long n) {
        String str = Long.toString(n);
        long[] answer = new long[str.length()];
        
        for (int i = 0; i < str.length(); i++) {
            answer[i] = n % (long) 10;
            n = n / 10;
        }
        return answer;
    }
}

์ฝ”๋“œ ์„ค๋ช…

์ •๋‹ต ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ์šฐ์„  Long.toString(n); ์„ ํ†ตํ•ด long ํƒ€์ž…์˜ n์„ String ํƒ€์ž…์œผ๋กœ ํ˜•๋ณ€ํ™˜์„ ํ•ด์ฃผ์—ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ •๋‹ต์„ ์ถœ๋ ฅํ•˜๋Š” answer ๋ณ€์ˆ˜์— ๋ฐฐ์—ด์„ ์„ ์–ธํ•ด ์ฃผ๊ณ , ๊ทธ ๊ธธ์ด๋Š” String str์˜ ๊ธธ์ด๋กœ ์„ค์ •ํ•ด ์ฃผ์—ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ •๋‹ต ์ฝ”๋“œ์™€ ๋‹ค๋ฅธ ์ ์€ ๋ฐฐ์—ด ํƒ€์ž…์„ long ํƒ€์ž…์œผ๋กœ ๊ฐ€์ ธ๊ฐ„๋‹ค๋Š” ์ ์ด๋‹ค.

๊ทธ ํ›„์— ์ •๋‹ต ์ฝ”๋“œ์˜ ๋ฐ˜๋ณต๋ฌธ๊ณผ ๊ฐ™์ด ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊นŒ์ง€ ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ,
์—ฌ๊ธฐ์„œ๋Š” ๋ณ€์ˆ˜ i์˜ ๊ฐ’์„ 0์—์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค!

answer[i] = n % (long) 10;
long ํƒ€์ž…์ธ n์„ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•ด ๊ฐ™์€ ํƒ€์ž…์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด (long) 10์œผ๋กœ ํ˜•๋ณ€ํ™˜ํ•œ.
๋ฐ˜๋ณต๋ฌธ์ด ์‹คํ–‰๋˜๋ฉด์„œ answer ๋ฐฐ์—ด์— ์ˆœ์ฐจ์ ์œผ๋กœ ๋‚˜๋จธ์ง€ ๊ฐ’์„ ์ž…๋ ฅ๋œ๋‹ค.

n = n / 10
์ž…๋ ฅ๋œ ๋‚˜๋จธ์ง€๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€์ˆ˜ n์— n / 10์˜ ๋ชซ์„ ๋‹ค์‹œ ๋„ฃ์–ด์ค€๋‹ค.

๋ชจ๋“  ๋ฐ˜๋ณต๋ฌธ์ด ์‹คํ–‰๋˜๊ณ  ๋‚˜๋ฉด ๋’ค์ง‘์–ด์ง„ ๊ฐ’์ด ๋ฐฐ์—ด์— ์ฐจ๋ก€๋Œ€๋กœ ์ž…๋ ฅ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ •๋‹ต ์ฝ”๋“œ๊ฐ€ ๊ฐœ๋…์„ ์•Œ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ๋” ์‰ฌ์šด ์ฝ”๋“œ์ด๊ณ  ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ ํ•จ์ˆ˜๋ฅผ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ๋‚ด๊ฐ€ ์ƒ๊ฐํ•ด ๋‚ธ ์ฝ”๋“œ๊ฐ€ ์ข€ ๋” ์‰ฝ๊ฒŒ ๋А๊ปด์งˆ ๊ฒƒ ๊ฐ™๋‹ค..!! ๐Ÿค”