Problem ๐Ÿ’ป

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

 

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

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 

๋ฌธ์ œ ์„ค๋ช…

๊ตฐ ์ „๋žต๊ฐ€ ๋จธ์“ฑ์ด๋Š” ์ „์Ÿ ์ค‘ ์ ๊ตฐ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์•”ํ˜ธ ์ฒด๊ณ„๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„๋ƒˆ์Šต๋‹ˆ๋‹ค.

  • ์•”ํ˜ธํ™”๋œ ๋ฌธ์ž์—ด cipher๋ฅผ ์ฃผ๊ณ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • ๊ทธ ๋ฌธ์ž์—ด์—์„œ code์˜ ๋ฐฐ์ˆ˜ ๋ฒˆ์งธ ๊ธ€์ž๋งŒ ์ง„์งœ ์•”ํ˜ธ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด cipher์™€ ์ •์ˆ˜ code๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ ํ•ด๋…๋œ ์•”ํ˜ธ ๋ฌธ์ž์—ด์„ returnํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ
  • 1 ≤ cipher์˜ ๊ธธ์ด ≤ 1,000
  • 1 ≤ code  cipher์˜ ๊ธธ์ด
  • cipher๋Š” ์†Œ๋ฌธ์ž์™€ ๊ณต๋ฐฑ์œผ๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ณต๋ฐฑ๋„ ํ•˜๋‚˜์˜ ๋ฌธ์ž๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆciphercoderesult
"dfjardstddetckdaccccdegk" 4 "attack"
"pfqallllabwaoclk" 2 "fallback"

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • "dfjardstddetckdaccccdegk" ์˜ 4๋ฒˆ์งธ, 8๋ฒˆ์งธ, 12๋ฒˆ์งธ, 16๋ฒˆ์งธ, 20๋ฒˆ์งธ, 24๋ฒˆ์งธ ๊ธ€์ž๋ฅผ ํ•ฉ์นœ "attack"์„ returnํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • "pfqallllabwaoclk" ์˜ 2๋ฒˆ์งธ, 4๋ฒˆ์งธ, 6๋ฒˆ์งธ, 8๋ฒˆ์งธ, 10๋ฒˆ์งธ, 12๋ฒˆ์งธ, 14๋ฒˆ์งธ, 16๋ฒˆ์งธ ๊ธ€์ž๋ฅผ ํ•ฉ์นœ "fallback"์„ returnํ•ฉ๋‹ˆ๋‹ค.

Approach 1 โŒ - ๋‚˜์˜ ์ดˆ๊ธฐ ์ ‘๊ทผ๋ฒ•

        1. String์„ String ๋ฐฐ์—ด๋กœ ๋ฐ”๊ฟ€๊ฒƒ.

        2. String ๋ฐฐ์—ด์—์„œ ์ˆซ์ž๋Š” intํ˜•์œผ๋กœ ๋ฐ”๊ฟ€๊ฒƒ.

        3. ํ•ด๋…ํ•œ ์•”ํ˜ธ๋ฅผ ๋‹ด์„ intํ˜• ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ฒƒ.

        4. if๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ code์™€ ์ผ์น˜ํ•œ๋‹ค๋ฉด intํ˜• ๋ฐฐ์—ด์— ๋‹ด์„๊ฒƒ

        5. intํ˜• ๋ฐฐ์—ด์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊ฟ€๊ฒƒ.

        6. ๋ฌธ์ž์—ด์„ ๋ฆฌํ„ดํ• ๊ฒƒ. 

 


Approach 2 โญ• - ๋‚˜์˜ ์ดˆ๊ธฐ ์ ‘๊ทผ๋ฒ•์— ๋Œ€ํ•œ ๋ฌธ์ œ์ 

1. ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•จ.

cipher๋Š” ๋ฌธ์ž์—ด์ด๋‹ค. ๊ฐ ๋ฌธ์ž๋Š” ์•”ํ˜ธ์˜ ์ผ๋ถ€์ด๋ฉฐ, ์ด๊ฒƒ์„ ์ˆซ์ž๋กœ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.

code์˜ ๋ฐฐ์ˆ˜ ๋ฒˆ์งธ ๊ธ€์ž๋ฅผ ์ฐพ๋Š”๋Œ€ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, cipher = "abcdef", code = 2์ผ๋•Œ, 2๋ฒˆ์งธ, 4๋ฒˆ์งธ, 6๋ฒˆ์งธ ๋ฌธ์ž๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค.

๋ฌธ์ž์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด ์ ‘๊ทผํ•˜๋ฉด ์ถฉ๋ถ„ํ•˜๋‹ค.

 

2. ๋ถˆํ•„์š”ํ•œ ๋ฐฐ์—ด ์‚ฌ์šฉ :

String์„ ๊ตณ์ด ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋ฌธ์ž์—ด์€ charAt()๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ํŠน์ • ์ธ๋ฑ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ฌธ์ž์—ด์„ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š์•„๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3. ํ•ด๋…๋œ ์•”ํ˜ธ ์ €์žฅ์„ ์œ„ํ•œ int[]์‚ฌ์šฉ :

์•”ํ˜ธ ๋ฌธ์ž์—ด์€ ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฏ€๋กœ, int[]๊ฐ€ ์•„๋‹Œ String์ด๋‚˜ StringBuilder๋ฅผ ์‚ฌ์šฉํ•ด ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋” ์ ํ•ฉํ•˜๋‹ค.

 

4. ์ž˜๋ชป๋œ ์กฐ๊ฑด ๊ฒ€์‚ฌ์™€ ์ „์ฒด ๋กœ์ง ๋ˆ„๋ฝ :

if๋ฌธ ์กฐ๊ฑด์ด ๋ถˆ์™„์ „ํ•˜๋ฉฐ, ์ „๋ฐ˜์ ์ธ ๋กœ์ง์ด ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜๋‹ค. code์˜ ๋ฐฐ์ˆ˜ ๋ฒˆ์งธ ๋ฌธ์ž๋ฅผ ์ฐพ๋Š” ๋ฐ˜๋ณต๋ฌธ๊ณผ ๋ฌธ์ž์—ด ์กฐํ•ฉ์ด ํ•„์š”ํ•˜๋‹ค.

 

 


Solution ๐Ÿ’ก

<๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋…ผ๋ฆฌ์  ์ ‘๊ทผ>

1. ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด ๋ฌธ์ž ์„ ํƒ :

code์˜ ๋ฐฐ์ˆ˜ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด for๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฌธ์ž์—ด์˜ ์ธ๋ฑ์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ, (i + 1) % code == 0 ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฌธ์ž๋งŒ ์„ ํƒํ•œ๋‹ค.

 

2. ๋ฌธ์ž๋ฅผ ์กฐํ•ฉ :

์„ ํƒ๋œ ๋ฌธ์ž๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด StringBuilder๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋Š” ๋ฌธ์ž์—ด ์กฐํ•ฉ์— ํšจ์œจ์ ์ด๋‹ค.

 

3. ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜ :

์ตœ์ข…์ ์œผ๋กœ StringBuilder๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

class Solution {
   public String solution(String cipher, int code) {
       StringBuilder decoded = new StringBuilder(); //ํ•ด๋…๋œ ์•”ํ˜ธ๋ฅผ ์ €์žฅํ•  StringBuilder
       
       //๋ฌธ์ž์—ด์˜ ๊ฐ ๋ฌธ์ž๋ฅผ ํ™•์ธ
       for (int i = 0; i < cipher.length(); i++) {
           if ((i + 1)% code == 0) { //์ธ๋ฑ์Šค +1์ด code์˜ ๋ฐฐ์ˆ˜์ธ์ง€ ํ™•์ธ
              decoded.append(cipher.charAt(i)); // ๋ฐฐ์ˆ˜์ธ ๊ฒฝ์šฐ ๋ฌธ์ž ์ถ”๊ฐ€
           }
       }
       return decoded.toString(); //StringBuilder๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜
   }
}

 

< ์ฝ”๋“œ ์„ค๋ช… >

1. StringBuilder decoded :

ํ•ด๋…๋œ ์•”ํ˜ธ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฌธ์ž์—ด ๊ฐ์ฒด์ด๋‹ค. StringBuilder๋Š” ๋ฌธ์ž์—ด ์กฐํ•ฉ ์ž‘์—…์— ํšจ์œจ์ ์ด๋‹ค.

 

2. for ๋ฐ˜๋ณต๋ฌธ :

๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋งŒํผ ๋ฐ˜๋ณตํ•˜๋ฉฐ, ๊ฐ ๋ฌธ์ž์— ์ ‘๊ทผํ•œ๋‹ค. 

 

3. (i + 1) % code == 0 ์กฐ๊ฑด:

์ธ๋ฑ์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ i+1์„ ์‚ฌ์šฉํ•ด 1 - based(1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š”) ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

code์˜ ๋ฐฐ์ˆ˜์ธ์ง€ ํ™•์ธํ•˜์—ฌ ํ•ด๋‹น ๋ฌธ์ž๋ฅผ ์„ ํƒํ•œ๋‹ค.

 

4. decoded.append() :

์กฐ๊ฑด์— ๋งž๋Š” ๋ฌธ์ž๋ฅผ StringBuilder์— ์ถ”๊ฐ€ํ•œ๋‹ค.

 

5. decoded.toString() :

์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 


Reference ๐Ÿ“„

+ Recent posts