๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[Java Script] 2019 ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ฒจ์šธ ์ธํ„ด์‹ญ-ํŠœํ”Œ(ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค_๋ ˆ๋ฒจ2)

by ๋‰ด์ชผ๋ฏธ 2023. 11. 23.

[Java Script] 2019 ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ฒจ์šธ ์ธํ„ด์‹ญ-ํŠœํ”Œ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค_๋ ˆ๋ฒจ2

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

 

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

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

programmers.co.kr

 

[๋ฌธ์ œ ์„ค๋ช…]

 

์…€์ˆ˜์žˆ๋Š” ์ˆ˜๋Ÿ‰์˜ ์ˆœ์„œ์žˆ๋Š” ์—ด๊ฑฐ ๋˜๋Š” ์–ด๋–ค ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅด๋Š” ์š”์†Œ๋“ค์˜ ๋ชจ์Œ์„ ํŠœํ”Œ(tuple)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. n๊ฐœ์˜ ์š”์†Œ๋ฅผ ๊ฐ€์ง„ ํŠœํ”Œ์„ n-ํŠœํ”Œ(n-tuple)์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(a1, a2, a3, ..., an)

 

ํŠœํ”Œ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ฑ์งˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ค‘๋ณต๋œ ์›์†Œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ex : (2, 3, 1, 2)
  • ์›์†Œ์— ์ •ํ•ด์ง„ ์ˆœ์„œ๊ฐ€ ์žˆ์œผ๋ฉฐ, ์›์†Œ์˜ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅด๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ํŠœํ”Œ์ž…๋‹ˆ๋‹ค. ex : (1, 2, 3) ≠ (1, 3, 2)
  • ํŠœํ”Œ์˜ ์›์†Œ ๊ฐœ์ˆ˜๋Š” ์œ ํ•œํ•ฉ๋‹ˆ๋‹ค.

์›์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ n๊ฐœ์ด๊ณ , ์ค‘๋ณต๋˜๋Š” ์›์†Œ๊ฐ€ ์—†๋Š” ํŠœํ”Œ (a1, a2, a3, ..., an)์ด ์ฃผ์–ด์งˆ ๋•Œ(๋‹จ, a1, a2, ..., an์€ ์ž์—ฐ์ˆ˜), ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง‘ํ•ฉ ๊ธฐํ˜ธ '{', '}'๋ฅผ ์ด์šฉํ•ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{{a1}, {a1, a2}, {a1, a2, a3}, {a1, a2, a3, a4}, ... {a1, a2, a3, a4, ..., an}}

 

์˜ˆ๋ฅผ ๋“ค์–ด ํŠœํ”Œ์ด (2, 1, 3, 4)์ธ ๊ฒฝ์šฐ ์ด๋Š”

{{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}

 

์™€ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ, ์ง‘ํ•ฉ์€ ์›์†Œ์˜ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ์ƒ๊ด€์—†์œผ๋ฏ€๋กœ

{{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}

{{2, 1, 3, 4}, {2}, {2, 1, 3}, {2, 1}}

{{1, 2, 3}, {2, 1}, {1, 2, 4, 3}, {2}}

๋Š” ๋ชจ๋‘ ๊ฐ™์€ ํŠœํ”Œ (2, 1, 3, 4)๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

 

ํŠน์ • ํŠœํ”Œ์„ ํ‘œํ˜„ํ•˜๋Š” ์ง‘ํ•ฉ์ด ๋‹ด๊ธด ๋ฌธ์ž์—ด s๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, s๊ฐ€ ํ‘œํ˜„ํ•˜๋Š” ํŠœํ”Œ์„ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

์ œํ•œ์‚ฌํ•ญ

  • s์˜ ๊ธธ์ด๋Š” 5 ์ด์ƒ 1,000,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • s๋Š” ์ˆซ์ž์™€ '{', '}', ',' ๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ˆซ์ž๊ฐ€ 0์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  • s๋Š” ํ•ญ์ƒ ์ค‘๋ณต๋˜๋Š” ์›์†Œ๊ฐ€ ์—†๋Š” ํŠœํ”Œ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œํ˜„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • s๊ฐ€ ํ‘œํ˜„ํ•˜๋Š” ํŠœํ”Œ์˜ ์›์†Œ๋Š” 1 ์ด์ƒ 100,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • return ํ•˜๋Š” ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 1 ์ด์ƒ 500 ์ดํ•˜์ธ ๊ฒฝ์šฐ๋งŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

sresult

"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4]
"{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4]
"{{20,111},{111}}" [111, 20]
"{{123}}" [123]
"{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

 

ํ’€์ด

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ์ ‘๊ทผํ•˜๊ธฐ ํŽธํ•˜๊ฒŒ s์˜ ๊ฐ’์„ ์œ ์˜๋ฏธํ•˜๊ฒŒ ์ชผ๊ฐœ๋Š”๊ฒŒ ์ค‘์š”ํ–ˆ๋‹ค.

 

์ ‘๊ทผ๋ฐฉ์‹

1. s ๊ฐ’์„ { } ๋‹จ์œ„๋กœ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ์ˆซ์ž๋งŒ ๋“ค์–ด๊ฐ€๊ฒŒ ๋งŒ๋“ค๊ธฐ 

    "{{2},{2,1},{2,1,3},{2,1,3,4}}" => sArr [ [ 2 ], [ 2, 1 ], [ 2, 1, 3 ], [ 2, 1, 3, 4 ] ]

2. ๊ธธ์ด๊ฐ€ ์ž‘์€์ˆœ์œผ๋กœ ์ •๋ ฌ

3.  answer์— ์ˆซ์ž๊ฐ€ ์—†์œผ๋ฉด ๋„ฃ์–ด์ฃผ๊ธฐ

 

๋ฌถ์Œ์”ฉ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„  '},' ๋กœ ๋‚˜๋ˆ ์ค˜์•ผํ–ˆ๋‹ค.

','์ด๋ ‡๊ฒŒ ํ•  ๊ฒฝ์šฐ๋Š” ๋ฌถ์Œํ˜•ํƒœ๋กœ ๋‚˜์˜ค์งˆ ์•Š์Œ ๊ฐ’์ด ๋‹ค ์ชผ๊ฐœ์ ธ์„œ ๋‚˜์˜ค๊ฒŒ ๋จ.

 

์˜ˆ์‹œ s.split(',')

['{{4', '2', '3}',
'{3}', '{2', '3',
'4', '1}', '{2',
'3}}']

 

๋ฌถ์Œ๋ณ„๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด map์œผ๋กœ ๋Œ๋ฉด์„œ ๋ฌธ์ž๋ฅผ ๊ฐ€์ ธ์™€์„œ ','๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค๊ณ , ๊ทธ๊ฒƒ์„ ๋‹ค์‹œ map์œผ๋กœ ๋Œ๋ฉด์„œ ์ˆซ์ž๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ๋ฅผ ๋ณด๋‹ˆ ์ˆœ์„œ๊ฐ€ ๋ฌถ์Œ์˜ ๊ธธ์ด๊ฐ€ ์ž‘์€์ˆœ์„œ๋ถ€ํ„ฐ ๋“ค์–ด๊ฐ€๋Š”๊ฒƒ์„ ๋ณด๊ณ  sort์— ๊ธธ์ด๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ํ•ด์„œ ์ •๋ ฌํ•ด์คฌ๋‹ค.

 

๋น ๋ฅธ return์€ ํšจ์œจ์„ฑ์— ๋„์›€์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธธ์ด๊ฐ€ 1์ด๋ฉด ๋ฐ”๋กœ return ํ•ด์ฃผ๊ณ ,

๊ทธ๊ฒŒ ์•„๋‹ˆ๋ฉด ๋ฌถ์Œ์˜ ๊ธธ์ด๊ฐ€ ์ž‘์€์ˆœ์œผ๋กœ ๋“ค์–ด๊ฐ€์ ธ ์žˆ๋Š” sArr๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๋ฐฐ์—ดํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์™€์„œ ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ๊ฐ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์™€์„œ answer์— ์žˆ๋Š”์ง€ includes๋กœ ํ™•์ธํ•˜์—ฌ ๊ฐ’์ด ์—†๋‹ค๋ฉด ๋„ฃ์–ด์ค€๋‹ค.  

 

function solution(s) {
    var answer = [];
    let sArr = s.split('},').map(el => el.replace(/[{}]/g, ''));
    sArr = sArr.map((str)=> str.split(',').map(Number));
    sArr.sort((a,b) => a.length - b.length);
    
    if(sArr.length === 1) {
        return [Number(sArr[0])];
    }else {
        sArr.forEach((nums) => {
            nums.map(num => {
                if (!answer.includes(num)) {
                    answer.push(num);
                }
            })
        })
    }
    
    return answer;
}