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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

 

 

 

 

๋ฌธ์ œ

  • 0 ๋˜๋Š” ์–‘์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ •์ˆ˜๋ฅผ ์ด์–ด ๋ถ™์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜ ๊ตฌํ•˜๊ธฐ

 

์ œํ•œ ์‚ฌํ•ญ

  • numbers์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 100,000 ์ดํ•˜
  • numbers์˜ ์›์†Œ๋Š” 0 ์ด์ƒ 1,000 ์ดํ•˜
  • ์ •๋‹ต์ด ๋„ˆ๋ฌด ํด ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ์–ด return

 

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

numbers return
[6, 10, 2] [3, 30, 34, 5, 9]
[3, 30, 34, 5, 9] "9534330"

[6, 10, 2]๋ผ๋ฉด [6102, 6210, 1062, 1026, 2610, 2106]๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ์ด์ค‘ ๊ฐ€์žฅ ํฐ ์ˆ˜๋Š” 6210

 

 

 

 

 

 

ํ’€์ด

 ์˜ˆ์‹œ๋ฅผ ๋ณด๊ณ  ์ฒ˜์Œ ๋– ์˜ค๋ฅธ ํ’€์ด๋Š” ์ˆœ์—ด(DFS)๋กœ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜์— ๋Œ€ํ•ด ๋ฌธ์ž๋ฅผ ์ด์–ด๋ถ™์–ด ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ œํ•œ ์‚ฌํ•ญ์„ ๋ณด๋ฉด ๊ธธ์ด๊ฐ€ ์ตœ๋Œ€ 100,000๋กœ n!์„ ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚  ๊ฒƒ์ด๋‹ค.

 

  • ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ

 ๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ํ’€์ด๋ฅผ ๋– ์˜ฌ๋ฆฌ๋‹ค๊ฐ€ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๋‹ค์Œ ๋ฌธ์ž๋ฅผ ์ด์–ด๋ถ™์ด๋ฉด ๋˜๊ฒ ๋‹ค๋Š” ํ’€์ด๊ฐ€ ๋– ์˜ฌ๋ž๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ๋  ๊ฒƒ์ด ์žˆ๋‹ค.

 

์ž…๋ ฅ ์˜ˆ์‹œ์—์„œ์ฒ˜๋Ÿผ [3, 30]์˜ ๊ฒฝ์šฐ, ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž๋Š” "330"๊ณผ "303"์ด๋‹ค. "330"์ด ์ตœ๋Œ“๊ฐ’์ด ๋œ๋‹ค. ๊ทธ๋ƒฅ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ฉด [30, 3]์ด ๋  ๊ฒƒ์ด๊ณ , ๋ฌธ์ž์—ด๋กœ ๋งŒ๋“  ์ˆ˜๋Š” "303"์ด ๋  ๊ฒƒ์ด๋‹ค. ์ตœ๋Œ“๊ฐ’์ธ "330"์ด ์•„๋‹ˆ๋‹ค.

 

์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด 3, 30์„ ์ •๋ ฌํ•ด์„œ ๋ถ™์ธ ๊ฐ’์ด 303์ด ์•„๋‹ˆ๋ผ 330์ด ๋˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ถ™์ธ ๋ฌธ์ž ๊ฐ’์„ ๋น„๊ตํ•ด ์ •๋ ฌํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

.sorted((o1, o2) -> (o2 + o1).compareTo(o1 + o2));

๋žŒ๋‹ค์‹์— compareTo ๋ฉ”์†Œ๋“œ๋ฅผ์‚ฌ์šฉํ•ด์„œ ์ •๋ ฌํ–ˆ๋‹ค.

 

*A.compareTo(B) ๋ฉ”์†Œ๋“œ : A์™€ B๋ฅผ ๋น„๊ตํ–ˆ์„ ๋•Œ, A๊ฐ€ ํฌ๋‹ค๋ฉด ์–‘์ˆ˜, ๊ฐ™์œผ๋ฉด 0, B๊ฐ€ ํฌ๋ฉด ์Œ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ •๋ ฌ์„ ํ•˜๊ฒŒ ๋˜์—ˆ์„ ๋•Œ, ์–‘์ˆ˜๋ผ๋ฉด ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•˜๊ณ , ์Œ์ˆ˜๋ผ๋ฉด ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•œ๋‹ค.

 

 

 

 

  • Stream API ์‚ฌ์šฉ

์ œํ•œ ์‚ฌํ•ญ์„ ๋ณด๋ฉด ์ •๋‹ต์ด ๋„ˆ๋ฌด ํด ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ์–ด ๋ฆฌํ„ดํ•˜๋ผ๊ณ  ํ•˜๊ณ , ์ •๋ ฌ๋„ ํ•ด์•ผํ•˜๋‹ˆ Stream API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํŽธํ•˜๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

 

 

 Stream ๊ณผ์ •์€ ํฌ๊ฒŒ 3๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.

 

1. Stream ์ƒ์„ฑ

Arrays.stream(numbers)

 

2. ๊ฐ€๊ณตํ•˜๊ธฐ

  • map์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜
.mapToObj(String::valueOf)

int ํ˜•ํƒœ์˜ ๋ฐฐ์—ด์„ String ๋ฐฐ์—ด์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค.

 

  • ์ •๋ ฌ
.sorted((o1, o2) -> (o2 + o1).compareTo(o1 + o2))

 

๋ถ™์ธ ๋ฌธ์ž๊ฐ’์„ ๋น„๊ตํ•ด ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ์„ ํ•œ๋‹ค.

 

 

3. ๊ฒฐ๊ณผ ๋งŒ๋“ค๊ธฐ

  • ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘(collect)
.collect(Collectors.joining());

์ •๋ ฌ๋œ ๋ฐฐ์—ด์˜ ์›์†Œ๋“ค์„ 1๊ฐœ์˜ String์œผ๋กœ ์ด์–ด๋ถ™์ธ๋‹ค.

 

 

 

  • ๋ฐ˜๋ก€

 ์ œํ•œ ์‚ฌํ•ญ์„ ๋ณด๋ฉด "numbers์˜ ์›์†Œ๋Š” 0 ์ด์ƒ 1,000 ์ดํ•˜"๋‹ค. [0, 0, 0]์ผ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๊ฐ’์€ 000์ด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฅผ ์ˆ˜๋กœ ๋งŒ๋“ค์—ˆ์„ ๋•Œ๋Š” 0์ด๋ฏ€๋กœ, 000์ธ ๊ฒฝ์šฐ์—๋Š” 0์œผ๋กœ ๋ฐ˜ํ™˜๋˜๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

 

 

์ฝ”๋“œ

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

class Solution {
    public String solution(int[] numbers) {
        String answer = Arrays.stream(numbers) //stream ์ƒ์„ฑ
                        .mapToObj(String::valueOf) //String์œผ๋กœ ๋ณ€ํ™˜
                        .sorted((o1, o2) -> (o2 + o1).compareTo(o1 + o2)) //๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ : 3 30 34 -> 34 3 30
                        .collect(Collectors.joining()); //๋ฌธ์ž๋ฅผ ์ด์–ด๋ถ™์ž„
        
        return answer.startsWith("0") ? "0" : answer; //000์ธ ๊ฒฝ์šฐ๋Š” 0์œผ๋กœ ๋ฐ˜ํ™˜
    }
}

 

 

 

 

 

๊ฒฐ๊ณผ

 

 

 

 

 

๋ฐฐ์šด์ 

  • Stream API
    1. ์ŠคํŠธ๋ฆผ ์ƒ์„ฑํ•˜๊ธฐ
    2. ๊ฐ€๊ณตํ•˜๊ธฐ
      1. ํ•„ํ„ฐ๋ง(filter)
      2. ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜(map)
      3. ์ •๋ ฌ(sorted)
    3. ๊ฒฐ๊ณผ ๋งŒ๋“ค๊ธฐ
      1. ์ง‘๊ณ„(max, min, sum, count..)
      2. ์ˆ˜์ง‘(collect) : list๋กœ ๋ฐ˜ํ™˜๋ฐ›๊ธฐ, 1๊ฐœ์˜ String์œผ๋กœ ์ด์–ด๋ถ™์ด๊ธฐ..

 

 

 

 

 

์ฐธ๊ณ 

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

[Java] Stream API์— ๋Œ€ํ•œ ์ดํ•ด - (1/5)

1. Stream API์— ๋Œ€ํ•œ ์ดํ•ด [ Stream API์— ๋Œ€ํ•œ ์†Œ๊ฐœ ] Java๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. (ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋ฉด ์ด ๊ธ€์„ ์ฐธ๊ณ ํ•˜๊ธธ

mangkyu.tistory.com

 

[Java] Stream API์˜ ํ™œ์šฉ ๋ฐ ์‚ฌ์šฉ๋ฒ• - ๊ธฐ์ดˆ (3/5)

1. Stream ์ƒ์„ฑํ•˜๊ธฐ ์•ž์„œ ์„ค๋ช…ํ•œ๋Œ€๋กœ Stream API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € Stream์„ ์ƒ์„ฑํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ํƒ€์ž…์— ๋”ฐ๋ผ Stream์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅธ๋ฐ, ์—ฌ๊ธฐ์„œ๋Š” Collection๊ณผ Array์— ๋Œ€ํ•ด์„œ Stream์„ ์ƒ์„ฑํ•˜

mangkyu.tistory.com

 

giraffe_