๐Ÿ“ algorithm

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ฝœ๋ผ์ธ  ์ˆ˜์—ด ๋งŒ๋“ค๊ธฐ

c0zi 2023. 11. 23. 17:05

๐Ÿ” ๋ฌธ์ œ ์„ค๋ช…


 

๋ชจ๋“  ์ž์—ฐ์ˆ˜ x์— ๋Œ€ํ•ด์„œ ํ˜„์žฌ ๊ฐ’์ด x์ด๋ฉด x๊ฐ€ ์ง์ˆ˜์ผ ๋•Œ๋Š” 2๋กœ ๋‚˜๋ˆ„๊ณ , x๊ฐ€ ํ™€์ˆ˜์ผ ๋•Œ๋Š” 3 * x + 1๋กœ ๋ฐ”๊พธ๋Š” ๊ณ„์‚ฐ์„ ๊ณ„์†ํ•ด์„œ ๋ฐ˜๋ณตํ•˜๋ฉด ์–ธ์  ๊ฐ€๋Š” ๋ฐ˜๋“œ์‹œ x๊ฐ€ 1์ด ๋˜๋Š”์ง€ ๋ฌป๋Š” ๋ฌธ์ œ๋ฅผ ์ฝœ๋ผ์ธ  ๋ฌธ์ œ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์œ„ ๊ณผ์ •์—์„œ ๊ฑฐ์ณ๊ฐ„ ๋ชจ๋“  ์ˆ˜๋ฅผ ๊ธฐ๋กํ•œ ์ˆ˜์—ด์„ ์ฝœ๋ผ์ธ  ์ˆ˜์—ด์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

๊ณ„์‚ฐ ๊ฒฐ๊ณผ 1,000 ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆ˜์— ๋Œ€ํ•ด์„œ๋Š” ์ „๋ถ€ ์–ธ์  ๊ฐ€ 1์— ๋„๋‹ฌํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž„์˜์˜ 1,000 ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์–‘์˜ ์ •์ˆ˜ n์ด ์ฃผ์–ด์งˆ ๋•Œ ์ดˆ๊ธฐ๊ฐ’์ด n์ธ ์ฝœ๋ผ์ธ  ์ˆ˜์—ด์„ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

๐Ÿšจ ์ œํ•œ ์‚ฌํ•ญ


1 ≤ n ≤ 1,000

 

 

๐Ÿ—’๏ธ ์ž…์ถœ๋ ฅ ์˜ˆ


n = 10, result = [10, 5, 16, 8, 4, 2, 1]

 

๐Ÿ’ก ์ ‘๊ทผ ๋ฐฉ๋ฒ•


 

n๊ฐ’์„ ๊ณ„์† ๊ณ„์‚ฐํ•ด๊ฐ€๋ฉฐ ๋ฐฐ์—ด์— ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ArrayList๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ๊ฐ€๋ณ€์ )

 

1. n์ด 1๋ณด๋‹ค ํฌ๋ฉด ์ง์ˆ˜์ธ์ง€ ํ™€์ˆ˜์ธ์ง€๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค. (while๋ฌธ ์‚ฌ์šฉ)

2. while๋ฌธ์„ ํ†ตํ•ด n์ด 1๊ณผ ๊ฐ™์•„์ง€๋ฉด, ๋ฐ˜๋ณต๋ฌธ์„ ๋น ์ ธ๋‚˜์˜จ๋‹ค. ๊ทธ ๋’ค 1์„ ๋”ํ•ด์ค€๋‹ค.

3. ArrayLlist๋ฅผ intํ˜• ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค.

 

 

import java.util.ArrayList;
import java.util.stream.*;

class Solution {
    public int[] solution(int n) {
        ArrayList<Integer> answer = new ArrayList<>();
        while (n > 1) {
            answer.add(n);
            if (n % 2 == 0) n = n / 2;
            else n = n * 3 + 1;
        }
        answer.add(1);
        return answer.stream().mapToInt(i -> i).toArray();
    }
}

 

๐Ÿ’š ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด


import java.util.stream.IntStream;

class Solution {
    public int[] solution(int n) {
        return IntStream.concat(
                        IntStream.iterate(n, i -> i > 1, i -> i % 2 == 0 ? i / 2 : i * 3 + 1),
                        IntStream.of(1))
                .toArray();
    }
}

 

๋‚˜๋Š” stream ์ž˜ ๋‹ค๋ฃจ๋Š” ์‚ฌ๋žŒ ๋ณผ ๋•Œ๋งˆ๋‹ค ๋ฆฌ์ŠคํŽ™ํ•œ๋‹ค... IntStream ์ด์šฉํ•ด์„œ ํ’€์ดํ•˜์…จ๋‹ค. ํ•œ์ค„๋กœ ํ‘ธ์‹  ๋ถ„๋„ ๊ณ„์‹œ๋˜๋ฐ ๋Œ€๋ฐ•..