๊ธ€ ์ž‘์„ฑ์ž: ๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด

๋ฌธ์ œ

https://programmers.co.kr/learn/courses/30/lessons/72411?language=swift 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋ฉ”๋‰ด ๋ฆฌ๋‰ด์–ผ

๋ ˆ์Šคํ† ๋ž‘์„ ์šด์˜ํ•˜๋˜ ์Šค์นดํ”ผ๋Š” ์ฝ”๋กœ๋‚˜19๋กœ ์ธํ•œ ๋ถˆ๊ฒฝ๊ธฐ๋ฅผ ๊ทน๋ณตํ•˜๊ณ ์ž ๋ฉ”๋‰ด๋ฅผ ์ƒˆ๋กœ ๊ตฌ์„ฑํ•˜๋ ค๊ณ  ๊ณ ๋ฏผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์—๋Š” ๋‹จํ’ˆ์œผ๋กœ๋งŒ ์ œ๊ณตํ•˜๋˜ ๋ฉ”๋‰ด๋ฅผ ์กฐํ•ฉํ•ด์„œ ์ฝ”์Šค์š”๋ฆฌ ํ˜•ํƒœ๋กœ ์žฌ๊ตฌ์„ฑํ•ด์„œ

programmers.co.kr

๋ ˆ์Šคํ† ๋ž‘์„ ์šด์˜ํ•˜๋˜ ์Šค์นดํ”ผ๋Š” ์ฝ”๋กœ๋‚˜19๋กœ ์ธํ•œ ๋ถˆ๊ฒฝ๊ธฐ๋ฅผ ๊ทน๋ณตํ•˜๊ณ ์ž ๋ฉ”๋‰ด๋ฅผ ์ƒˆ๋กœ ๊ตฌ์„ฑํ•˜๋ ค๊ณ  ๊ณ ๋ฏผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ์กด์—๋Š” ๋‹จํ’ˆ์œผ๋กœ๋งŒ ์ œ๊ณตํ•˜๋˜ ๋ฉ”๋‰ด๋ฅผ ์กฐํ•ฉํ•ด์„œ ์ฝ”์Šค์š”๋ฆฌ ํ˜•ํƒœ๋กœ ์žฌ๊ตฌ์„ฑํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฉ”๋‰ด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์„ ์กฐํ•ฉํ•ด์„œ ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด๋กœ ๊ตฌ์„ฑํ•˜๋ฉด ์ข‹์„ ์ง€ ๊ณ ๋ฏผํ•˜๋˜ "์Šค์นดํ”ผ"๋Š” ์ด์ „์— ๊ฐ ์†๋‹˜๋“ค์ด ์ฃผ๋ฌธํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ํ•จ๊ป˜ ์ฃผ๋ฌธํ•œ ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์„ ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด๋กœ ๊ตฌ์„ฑํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.


๋‹จ, ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด๋Š” ์ตœ์†Œ 2๊ฐ€์ง€ ์ด์ƒ์˜ ๋‹จํ’ˆ๋ฉ”๋‰ด๋กœ ๊ตฌ์„ฑํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ตœ์†Œ 2๋ช… ์ด์ƒ์˜ ์†๋‹˜์œผ๋กœ๋ถ€ํ„ฐ ์ฃผ๋ฌธ๋œ ๋‹จํ’ˆ๋ฉ”๋‰ด ์กฐํ•ฉ์— ๋Œ€ํ•ด์„œ๋งŒ ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด ํ›„๋ณด์— ํฌํ•จํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์†๋‹˜ 6๋ช…์ด ์ฃผ๋ฌธํ•œ ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์˜ ์กฐํ•ฉ์ด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๋ฉด,
(๊ฐ ์†๋‹˜์€ ๋‹จํ’ˆ๋ฉ”๋‰ด๋ฅผ 2๊ฐœ ์ด์ƒ ์ฃผ๋ฌธํ•ด์•ผ ํ•˜๋ฉฐ, ๊ฐ ๋‹จํ’ˆ๋ฉ”๋‰ด๋Š” A ~ Z์˜ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•ฉ๋‹ˆ๋‹ค.)

์†๋‹˜ ๋ฒˆํ˜ธ์ฃผ๋ฌธํ•œ ๋‹จํ’ˆ๋ฉ”๋‰ด ์กฐํ•ฉ

1๋ฒˆ ์†๋‹˜ A, B, C, F, G
2๋ฒˆ ์†๋‹˜ A, C
3๋ฒˆ ์†๋‹˜ C, D, E
4๋ฒˆ ์†๋‹˜ A, C, D, E
5๋ฒˆ ์†๋‹˜ B, C, F, G
6๋ฒˆ ์†๋‹˜ A, C, D, E, H

๊ฐ€์žฅ ๋งŽ์ด ํ•จ๊ป˜ ์ฃผ๋ฌธ๋œ ๋‹จํ’ˆ๋ฉ”๋‰ด ์กฐํ•ฉ์— ๋”ฐ๋ผ "์Šค์นดํ”ผ"๊ฐ€ ๋งŒ๋“ค๊ฒŒ ๋  ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด ๊ตฌ์„ฑ ํ›„๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ฝ”์Šค ์ข…๋ฅ˜๋ฉ”๋‰ด ๊ตฌ์„ฑ์„ค๋ช…

์š”๋ฆฌ 2๊ฐœ ์ฝ”์Šค A, C 1๋ฒˆ, 2๋ฒˆ, 4๋ฒˆ, 6๋ฒˆ ์†๋‹˜์œผ๋กœ๋ถ€ํ„ฐ ์ด 4๋ฒˆ ์ฃผ๋ฌธ๋์Šต๋‹ˆ๋‹ค.
์š”๋ฆฌ 3๊ฐœ ์ฝ”์Šค C, D, E 3๋ฒˆ, 4๋ฒˆ, 6๋ฒˆ ์†๋‹˜์œผ๋กœ๋ถ€ํ„ฐ ์ด 3๋ฒˆ ์ฃผ๋ฌธ๋์Šต๋‹ˆ๋‹ค.
์š”๋ฆฌ 4๊ฐœ ์ฝ”์Šค B, C, F, G 1๋ฒˆ, 5๋ฒˆ ์†๋‹˜์œผ๋กœ๋ถ€ํ„ฐ ์ด 2๋ฒˆ ์ฃผ๋ฌธ๋์Šต๋‹ˆ๋‹ค.
์š”๋ฆฌ 4๊ฐœ ์ฝ”์Šค A, C, D, E 4๋ฒˆ, 6๋ฒˆ ์†๋‹˜์œผ๋กœ๋ถ€ํ„ฐ ์ด 2๋ฒˆ ์ฃผ๋ฌธ๋์Šต๋‹ˆ๋‹ค.

[๋ฌธ์ œ]

๊ฐ ์†๋‹˜๋“ค์ด ์ฃผ๋ฌธํ•œ ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์ด ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ๋‹ด๊ธด ๋ฐฐ์—ด orders, "์Šค์นดํ”ผ"๊ฐ€ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” ์ฝ”์Šค์š”๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด course๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, "์Šค์นดํ”ผ"๊ฐ€ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋  ์ฝ”์Šค์š”๋ฆฌ์˜ ๋ฉ”๋‰ด ๊ตฌ์„ฑ์„ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

ํ’€์ด

๋ฌธ์ œ๋ฅผ ์ฝ๊ณ  ์กฐํ•ฉ์œผ๋กœ ํ‘ธ๋Š” ๊ฒƒ ๋ง๊ณ ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์ง€ ์•Š์„๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ฃผ๋ฌธ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋Š” 20๊ฐœ, ํ•œ ์ฃผ๋ฌธ์•ˆ์— ํฌํ•จ๋˜๋Š” ๋ฉ”๋‰ด์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋Š” 10๊ฐœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ดˆ๊ณผ ์—†์ด ์ถฉ๋ถ„ํžˆ ๊ฐ€๋Šฅํ•ด๋ณด์˜€์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต 1์ดˆ์— 1์–ต๋ฒˆ์˜ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— 10! * 20์„ ์ตœ๋Œ€๋กœ ์žก์œผ๋ฉด ์กฐํ•ฉ ๊ณ„์‚ฐ๋งŒ 1์ดˆ์•ˆ์— ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์กฐํ•ฉ์œผ๋กœ ํ’€์ด๋ฅผ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

๋จผ์ € ๊ฐ ์ฃผ๋ฌธ์— ๋Œ€ํ•ด course ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์กฐํ•ฉ์„ ์ฐพ์•„์ค๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด,

 

["ABCDE", "AB", "CD", "ADE", "XYZ", "XYZ", "ACD"], [2,3,5]

 

์˜ ๊ฒฝ์šฐ์—๋Š” ์ฒซ๋ฒˆ์งธ ์ฃผ๋ฌธ์ธ "ABCDE"์— ๋Œ€ํ•ด 2๊ฐœ, 3๊ฐœ, 5๊ฐœ๋ฅผ ๋ฝ‘์•„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์กฐํ•ฉ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์–ป์€ ์กฐํ•ฉ์€ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์— ๋„ฃ์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

2๊ฐœ ๋ฝ‘์„ ๋•Œ: ["AB", "AC", "AD", "AE", "BC", "BD", "BE", "CD", "CE", "DE"]

3๊ฐœ ๋ฝ‘์„ ๋•Œ: ["ABC", "ABD", "ABE", "ACD", "ACE", "ADE", "BCD", "BCE", "BDE", "CDE"]

5๊ฐœ ๋ฝ‘์„ ๋•Œ: ["ABCDE"]

 

์ด๋ฒˆ ์ฃผ๋ฌธ์— ๋Œ€ํ•œ ์ „์ฒด ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ:

["AB", "AC", "AD", "AE", "BC", "BD", "BE", "CD", "CE", "DE", "ABC", "ABD", "ABE", "ACD", "ACE", "ADE", "BCD", "BCE", "BDE", "CDE", "ABCDE"]

 

์ด๋ ‡๊ฒŒ ๋ชจ๋“  ์ฃผ๋ฌธ์— ๋Œ€ํ•ด course ์˜ ๊ฐ’๋“ค์— ๋Œ€ํ•œ ์กฐํ•ฉ์„ ๋งŒ๋“ค์–ด ์ €์žฅํ•˜๋ฉด, ๊ฐ ์ฃผ๋ฌธ์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์กฐํ•ฉ๋“ค์„ ๋ชจ์•„ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๊ฐ ์กฐํ•ฉ๋“ค์ด ๋ช‡๋ฒˆ์”ฉ ๋“ฑ์žฅํ–ˆ๋Š”์ง€ ์•Œ์•„๋‚ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์ด๋ฅผ ์œ„ํ•ด์„œ [String : Int] ํƒ€์ž…์˜ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์„ ์–ธํ•˜์—ฌ ์กฐํ•ฉ๊ณผ ๊ทธ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. course์˜ ๋“ค์–ด์žˆ๋Š” ๊ฐ’๋“ค์„ ํ•˜๋‚˜์”ฉ ๋ฝ‘์•„๊ฐ€๋ฉฐ 2๊ฐœ์”ฉ ๋ฝ‘์„ ๋•Œ, 3๊ฐœ์”ฉ ๋ฝ‘์„ ๋•Œ, 5๊ฐœ์”ฉ ๋ฝ‘์„ ๋•Œ์— ๋Œ€ํ•œ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด์ฃผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๊ฐœ์ˆ˜๋ฅผ ์–ป๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

 

["AE": 2, "AB": 2, "CD": 3, "BE": 1, "DE": 2, "YZ": 2, "XY": 2, "XZ": 2, "BC": 1, "BD": 1, "AD": 3, "CE": 1, "AC": 2]

 

์ด์ œ ๊ฐ€์žฅ ํฐ ๋“ฑ์žฅํšŸ์ˆ˜ ๊ฐ’์„ ๊ตฌํ•˜๊ณ , ํ•ด๋‹น ๊ฐ’์„ value๋กœ ๊ฐ€์ง€๋Š” key๋ฅผ ๋ชจ๋‘ ์ฐพ์•„ ์ •๋‹ต ๋ฐฐ์—ด์— ๋„ฃ๋Š” ๊ณผ์ •์„ ๊ฐ ๊ธธ์ด์˜ ์กฐํ•ฉ๋“ค์— ๋Œ€ํ•ด ๋ฐ˜๋ณตํ•˜๋ฉด ์ •๋‹ต์„ ์–ป๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ