[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;
}