Problem ๐Ÿ’ป

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

 

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

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

programmers.co.kr

 

๋ฌธ์ œ ์„ค๋ช…

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


์ œํ•œ์‚ฌํ•ญ
  • 1 ≤ my_string์˜ ๊ธธ์ด ≤ 1,000

์ž…์ถœ๋ ฅ ์˜ˆmy_stringreturn
"jaron" "noraj"
"bread" "daerb"

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

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

  • my_string์ด "jaron"์ด๋ฏ€๋กœ ๊ฑฐ๊พธ๋กœ ๋’ค์ง‘์€ "noraj"๋ฅผ returnํ•ฉ๋‹ˆ๋‹ค.

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

  • my_string์ด "bread"์ด๋ฏ€๋กœ ๊ฑฐ๊พธ๋กœ ๋’ค์ง‘์€ "daerb"๋ฅผ returnํ•ฉ๋‹ˆ๋‹ค.
 

 


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

1. String์ธ my_string์„ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค

2. ๋’ค์ง‘์–ด์„œ ๋ฐ˜ํ™˜ํ•  answer์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค.

3. for๋ฌธ์„ ํ†ตํ•ด ๋ฐฐ์—ด my_string์˜ ์š”์†Œ์ธ ๋ฌธ์ž ํ•œ ๊ธ€์ž๋งˆ๋‹ค answer ๋ฐฐ์—ด์˜ ์š”์†Œ์— ๋‹ด๋Š”๋‹ค. 

์ด๋•Œ answer[i] = my_string[my_string.length - i];๋กœ ์ˆœ์„œ๋ฅผ ๋’ค์ง‘๋Š”๋‹ค.

 

class Solution {
    public String solution(String my_string) {
      
        String [] answer = new [my_string.length];
        for (String s : my_string){
            
        }
    }
}

์—ญ์‹œ๋‚˜..๊ฐˆ ๊ธธ์ด ๋จผ ๋‚˜์˜ ์ฝ”๋“œ... 

 


Approach 2 โญ• - ๋‚˜์˜ ์ ‘๊ทผ๋ฒ•์— ๋Œ€ํ•œ ๊ต์ •

์ฃผ์š” ๋ฌธ์ œ์ 

1. ๋ฌธ๋ฒ•์  ์˜ค๋ฅ˜:

  • new [my_string.length]๋Š” ๋ฐฐ์—ด ์„ ์–ธ์ด ์ž˜๋ชป๋˜์—ˆ๋‹ค. ์ž๋ฐ”์—์„œ๋Š” ๋ฐฐ์—ด ์ƒ์„ฑ ์‹œ ํฌ๊ธฐ์™€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค.

char[] answer = new char[my_string.length()];

 

 • for (String s : my_string)๋Š” ์ž˜๋ชป๋œ ๋ฐ˜๋ณต๋ฌธ์ด๋‹ค. 

   my_string์€ ๋ฌธ์ž์—ด์ด๊ณ , ๋ฌธ์ž์—ด์„ ๋ฐ˜๋ณตํ•˜๋ ค๋ฉด char[] ๋˜๋Š” charAt()์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

2. ๋ฐ์ดํ„ฐ ํƒ€์ž… ์„ ํƒ:

  • String[] ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ ค ํ–ˆ์œผ๋‚˜, ๋ฌธ์ œ์—์„œ๋Š” ๋ฌธ์ž์—ด์„ ๋’ค์ง‘์–ด String ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.

  • ๋Œ€์‹  char[]๋‚˜ StringBuilder๊ฐ€ ๋” ์ ํ•ฉํ•˜๋‹ค.

 

3. ๋ถˆํ•„์š”ํ•œ ๋ณต์žก์„ฑ:

  • ๋ฐฐ์—ด์„ ์ด์šฉํ•ด ์ˆ˜๋™์œผ๋กœ ๋’ค์ง‘๋Š” ๋ฐฉ์‹์€ ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์œผ๋‚˜, 

    ์ž๋ฐ”์—์„œ ๋ฌธ์ž์—ด ์กฐ์ž‘์—๋Š” StringBuilder์˜ reverse()๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.


Solution ๐Ÿ’ก

์š”๊ตฌ๋˜๋Š” ๋…ผ๋ฆฌ์  ํ’€์ด ๊ณผ์ •

1. ๋ฌธ์ž์—ด ๋ณ€ํ™˜:

  • ๋ฌธ์ž์—ด์„ ๋ฌธ์ž ๋ฐฐ์—ด(char[])๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๊ฐœ๋ณ„ ๋ฌธ์ž์— ์ ‘๊ทผํ•œ๋‹ค.

2. ๋’ค์ง‘๊ธฐ ๋กœ์ง ๊ตฌํ˜„:

  • ๋ฌธ์ž ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜์ „(length - 1 - i)์‹œํ‚ค๋ฉฐ ๋’ค์ง‘๋Š”๋‹ค.

  • ๋˜๋Š” StringBuilder์˜ reverse() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ๋ฌธ์ž์—ด์„ ๋’ค์ง‘๋Š”๋‹ค.

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

  • ๋’ค์ง‘ํžŒ ๋ฐฐ์—ด ๋˜๋Š” ๋ฌธ์ž์—ด์„ ๋‹ค์‹œ String์œผ๋กœ ๋ณ€ํ™˜ํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.

class Solution {
   public String solution(String my_string) {
       //1. ๋ฌธ์ž์—ด์„ ๋ฌธ์ž ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜
       char[] charArray = my_string.toCharArray();
       
       //2. ๋’ค์ง‘ํžŒ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด ์ƒ์„ฑ
       char[] answer = new char[charArray.length];
       
       //3. ๋ฌธ์ž ๋ฐฐ์—ด ๋’ค์ง‘๊ธฐ
       for (int i = 0; i < charArray.length; i++) {
           answer[i] = charArray[charArray.length - 1 -i];
       }
       
       //4. ๊ฒฐ๊ณผ ๋ฐฐ์—ด์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด ๋ฐ˜ํ™˜
       return new String(answer);
   }
}

 

StringBuilder๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•

class Solution {
   public String solution(String my_string) {
       // StringBuilder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด ๋’ค์ง‘๊ธฐ
       return new StringBuilder(my_string).reverse().toString();
   }
}

 

 

๊ฐ ๋ฐฉ๋ฒ•์˜ ํ‰๊ฐ€

 

1. ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•

์žฅ์ :

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

๊ณต๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋ช…ํ™•ํ•˜๋‹ค.

๋‹จ์ :

์ฝ”๋“œ๊ฐ€ ๋‹ค์†Œ ๋ณต์žกํ•˜๋ฉฐ, ์ง์ ‘์ ์ธ ๊ตฌํ˜„์œผ๋กœ ์ธํ•ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค.

 

2. StringBuilder๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•

์žฅ์ :

๊ฐ„๊ฒฐํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ์ข‹๋‹ค.

๋ฌธ์ž์—ด ์กฐ์ž‘์— ์ตœ์ ํ™”๋œ ์ž๋ฐ”์˜ ๋‚ด์žฅ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ฝ”๋“œ ํšจ์œจ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๋‹ค.

๋‹จ์ :

๋ฌธ์ž์—ด ๋’ค์ง‘๊ธฐ ๋กœ์ง์ด ์ˆจ๊ฒจ์ ธ ์žˆ์–ด ํ•™์Šต์šฉ์œผ๋กœ๋Š” ๋œ ์ง๊ด€์ ์ด๋‹ค.


Reference ๐Ÿ“„

1. char[] ๋ฐฐ์—ด

char[] charArray = my_string.toCharArray();

์„ค๋ช…:

  -  toCharArray()๋Š” ๋ฌธ์ž์—ด(String)์„ ๋ฌธ์ž ๋ฐฐ์—ด(char[])๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

  - ์˜ˆ๋ฅผ ๋“ค์–ด, "hello"๋ผ๋Š” ๋ฌธ์ž์—ด์€ ['h', 'e', 'l', 'l', 'o']๋กœ ๋ณ€ํ™˜๋œ๋‹ค.

  -  ๋ฌธ์ž ๋ฐฐ์—ด์€ ๋ฌธ์ž์—ด์˜ ๊ฐ ๊ธ€์ž์— ๊ฐœ๋ณ„์ ์œผ๋กœ ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

์˜ˆ์ œ:

String str = "hello";
char[] charArray = str.toCharArray();
System.out.println(charArray[0]);

2. ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ (new String)

๋ฌธ๋ฒ•:

return new String(anwer);

์„ค๋ช…:

  - ๋ฌธ์ž ๋ฐฐ์—ด(char[])์„ ๋ฌธ์ž์—ด(String)๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

  -  ์œ„ ์ฝ”๋“œ์—์„œ๋Š” ๋’ค์ง‘์–ด์ง„ ๋ฌธ์ž ๋ฐฐ์—ด์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์˜ˆ์ œ:

char[] charArray = {'h', 'e', 'l', 'l','o'};
String str = new String(charArray);
System.out.println(str); //"hello"

 

3. StringBuilder ํด๋ž˜์Šค

return new StringBuilder(my_string).reverse().toString();

์„ค๋ช…:

  - StringBuilder๋Š” ๋ฌธ์ž์—ด์„ ํšจ์œจ์ ์œผ๋กœ ์กฐ์ž‘(์ˆ˜์ •, ์ถ”๊ฐ€, ์‚ญ์ œ)ํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค์ด๋‹ค.

  - reverse():  ๋ฌธ์ž์—ด์„ ๋’ค์ง‘๋Š” ๋ฉ”์„œ๋“œ.

  - toString(): StringBuilder ๊ฐ์ฒด๋ฅผ String์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

StringBuilder sb = new StringBuilder("hello");
string reversed = sb.reverse().toString(); //"olleh"

+ Recent posts