๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–‹๏ธ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜/์ฝ”๋”ฉํ…Œ์ŠคํŠธ

[์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ch.1] ๋ฌธ์ž์—ด(2)

by OR15A 2023. 11. 12.

ํšŒ๋ฌธ ๋ฌธ์ž์—ด, ํŒฐ๋ฆฐ๋“œ๋กฌ

GOOG, POOP ๊ณผ ๊ฐ™์ด ๊ฑฐ์šธ์ฒ˜๋Ÿผ ์ƒ๊ธด ๋ฌธ์ž

  • ์•ž์—์„œ ๋งํ•œ ๊ฒƒ์ฒ˜๋Ÿผ lt์™€ rt๊ฐ€ ๋ฌธ์ž์—ด ๊ธธ์ด์˜ 1/2๋งŒํผ ๋ฐ˜๋ณตํ•  ๋•Œ๊นŒ์ง€ ๊ฐ™์•„์•ผ ํ•จ
  • ๋ฐ˜๋ณต๋ฌธ์€ for(int i=0; i< len/2 ; i++)
  • lt = i;
  • rt = len -i -1;
str = str.toUpperCase();   // ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์•ˆํ•˜๊ธฐ๋กœ ํ–ˆ์„ ๋•Œ
int len = str.length();
for(int i=0; i< len/2 ; i++){
    if(str.charAt(i) != str.charAt(len -i -1) ) return "NO";
}
  • StringBuilder์„ ์ด์šฉํ•˜๊ธฐ .equalsIgnoreCase()
String tmp = new StringBuilder(str).reverse().toString();  //์›๋ž˜ ๋ฌธ์ž์—ด, ๋’ค์ง‘์€ ๋ฌธ์ž์—ด ๋น„๊ต
if(str.equalsIgnoreCase(tmp)) answer="YES";



ํŒฐ๋ฆฐ๋“œ๋กฌ = ์•ž์—์„œ ์ฝ์„ ๋•Œ๋‚˜ ๋’ค์—์„œ ์ฝ์„ ๋•Œ๋‚˜ ๊ฐ™์€ ๋ฌธ์ž์—ด

  • ์ด๋ฒˆ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์€ ์•ŒํŒŒ๋ฒณ๋งŒ ๊ฒ€์‚ฌํ•จ. ํŠน์ˆ˜๋ฌธ์ž๋‚˜ ์ˆซ์ž๋Š” ์ƒ๊ด€์—†์Œ
  • replaceAll()์— ์‚ฌ์šฉํ•œ ์ •๊ทœ์‹. ^๋Š” ๋ถ€์ • [A-Z]๋Š” ๋Œ€๋ฌธ์ž -> ํ•ฉ์ณ์„œ "์˜์–ด๋Œ€๋ฌธ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด"
str = str.toUpperCase().replaceAll("^[A-Z]", "");
String tmp = new StringBuilder(str).reverse().toString();
if( str.equals(tmp) ) answer = "YES";



์ˆซ์ž๋งŒ ์ถ”์ถœ

๋ฌธ์ž์™€ ์ˆซ์ž๊ฐ€ ์„ž์—ฌ์žˆ๋Š” ๋ฌธ์ž์—ด๋กœ ์ž์—ฐ์ˆ˜ ๋งŒ๋“ค๊ธฐ

  • ๋ฌธ์ž์™€ ์ˆซ์ž๊ฐ€ ์„ž์—ฌ์žˆ๋Š” ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง€๋ฉด ์ˆซ์ž๋งŒ ์ถ”์ถœํ•ด์„œ ๊ทธ ์ˆœ์„œ๋Œ€๋กœ ๊ตฌ์„ฑ๋œ ์ž์—ฐ์ˆ˜ ๋งŒ๋“ค๊ธฐ
  • ์˜ˆ์‹œ tge0a1h205er -> 01205 ->1205
  • ์•„์Šคํ‚ค๋ฌธ์ž '0'=48, '9'=57
  • answer = answer *10 + (x - 48)
  • *10์„ ํ•˜๋Š” ์ด์œ : ์ž๋ฆฟ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ... 1 -> 10 + 2 -> 120 + 0 -> 1200 + 5
  • ์•„.. ์ด๋Ÿฐ๊ฑธ ์™ธ์šฐ๋ผ๋Š” ๊ฑฐ๊ตฌ๋‚˜
int answer=0;
for( char x : str.toCharArray() ){
    if( x>=48 && x<==57 ) answer = answer*10 + (x-48);
}
return answer;
  • ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ• Character.isDigit(x) -> ์ด๊ฒƒ์ด ์ˆซ์ž์ธ์ง€ ํŒ๋ณ„
  • String answer = ""; for( char x : str.toCharArray() ){ if( Character.isDigit(x) ) answer += x; } return Integer.parseInt(answer);



๊ฐ€์žฅ ์งง์€ ๋ฌธ์ž ๊ฑฐ๋ฆฌ

๋ฌธ์ž์—ดstr์˜ ๊ฐ ๋ฌธ์ž๊ฐ€ ํƒ€๊ฒŸ๋ฌธ์ž target์™€ ๋–จ์–ด์ง„ ๊ฑฐ๋ฆฌ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๊ธฐ

  • teachermode e
  • ๊ฐ๊ฐ์˜ ๋ฌธ์ž๊ฐ€ e๋กœ ๋ถ€ํ„ฐ ๋–จ์–ด์ง„ ๊ฑฐ๋ฆฌ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๊ธฐ
  • ๋ฐฐ์—ด ์™ผ์ชฝ๋ถ€ํ„ฐ ์ž„์˜์˜ ์ˆซ์ž P๋ฅผ ์ œ์‹œํ•˜๊ณ  ํƒ€๊ฒŸ ์ˆซ์ž์™€ ๊ฐ™์œผ๋ฉด 0 , ์•„๋‹ˆ๋ฉด 1 ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ ์˜†์œผ๋กœ ์ด๋™ํ•˜๊ธฐ
  • P์˜ ์ดˆ๊ธฐํ™”๋Š” ํ„ฐ๋ฌด๋‹ˆ ์—†๋Š” ์ˆซ์ž๋กœ
  • [1001][0][1][2][3][0][1][2][3][4][0] -> ํƒ€๊ฒŸ ๋ฌธ์ž ์ž์‹ ์€ 0, ์•„๋‹ˆ๋ฉด ์˜†์œผ๋กœ 1 ์ฆ๊ฐ€. ๋‹ค์‹œ ์ž์‹ ์ด๋ฉด 0
  • ์ตœ์†Œ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์˜ค๋ฅธ์ชฝ์—์„œ for๋ฌธ์ด ํ•œ ๋ฒˆ ๋” ๋Œ์•„์•ผ ํ•จ.
  • ์ด๋ฏธ ๊ตฌํ•œ ๊ฐ’๊ณผ ๋น„๊ตํ•˜๋ฉด์„œ ์ƒˆ๋กœ ๊ตฌํ•œ ๊ฐ’์ด ๋” ์ž‘์œผ๋ฉด ์ˆ˜์ •
int[] answer = new int[str.length()];
int p = 1000;
for(int i=0; i<str.length(); i++){
    if(s.charAt(i)==target){
        p=0;
        answer[i]=p;
    } else {
        p++;
        answer[i]=p;
    }
}
p=1000; //p ๋‹ค์‹œ ์ดˆ๊ธฐํ™”. ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋ฐ˜๋ณต๋ฌธ ๋Œ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ
for(int i=str.length(); i>0 i--){
    if(s.charAt(i)==target){
        p=0;
    } else {
        p++;
        answer[i]=Math.min( answer[i], p);  //์–‘๋ฐฉํ–ฅ ๋น„๊ต๋กœ ์–ป์€ ๊ฐ’ ์ค‘์—์„œ ์ž‘์€ ๊ฒƒ์„ ๋Œ€์ž…ํ•˜๊ธฐ
    }
}