๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ProgramSolve/Baekjoon

[BOJ] 17609๋ฒˆ - ํšŒ๋ฌธ (Java)

by SooooooooS 2023. 12. 13.
728x90

๐Ÿ› ๏ธ ๋ฌธ์ œ ๐Ÿ› ๏ธ


๐Ÿ—’๏ธ ์„ค๋ช… ๐Ÿ—’๏ธ

์ด ๋ฌธ์ œ๋Š” ํšŒ๋ฌธ์„ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.

๋‹จ, 1๊ฐœ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ํšŒ๋ฌธ์ด ๋˜๋Š” ๊ฒƒ๋„ ์•Œ์•„๋‚ด์•ผ ํ•œ๋‹ค. ์ด ๋ถ€๋ถ„์—์„œ ๋ฐ˜๋ก€๋ฅผ ํ™•์ธํ•˜๊ณ  ๊ณ ์น˜๋Š” ๊ณผ์ •์„ ์ •๋ฆฌํ•œ๋‹ค.

 

ํšŒ๋ฌธ์˜ ํŠน์„ฑ์œผ๋กœ ๊ฐ€์šด๋ฐ๋ฅผ ๊ธฐ์ ์œผ๋กœ ์–‘์ชฝ์ด ๊ฐ™์•„์•ผ ํ•˜๋ฏ€๋กœ start, end๋ฅผ ๋‘์–ด ๋น„๊ตํ–ˆ๋‹ค.

์ฒ˜์Œ์— ๋‚ด๊ฐ€ ํšŒ๋ฌธ์ธ์ง€ ์•Œ์•„๋‚ด๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

public static int isPalindrome(String s) {
    int start = 0;
    int end = s.length() - 1;

    int count = 0;
    while(start <= end) {
        if(s.charAt(start) == s.charAt(end)) {
            start++;
            end--;
        }
        else {
            count++;
            if(s.charAt(start+1) == s.charAt(end)) {
                start++;
            }
            else if(s.charAt(start) == s.charAt(end-1)) {
                end--;
            }
            else {
                count++;
            }
        }
        if(count > 1) {
            break;
        }
    }
    if(count > 1) {
        return 2;
    }
    return count;
}

 

๊ทธ๋ƒฅ ๋‹จ์ˆœํ•˜๊ฒŒ ์ƒ๊ฐํ•˜์—ฌ start์™€ end ์œ„์น˜์— ์žˆ๋Š” ๋ฌธ์ž๊ฐ€ ๊ฐ™์ง€ ์•Š์„ ๋•Œ ๊ฐ๊ฐ ๋‹ค์Œ ๋ฌธ์ž๋ฅผ ํ™•์ธํ–ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ฐ˜๋ก€๊ฐ€ ์žˆ๋‹ค.

1
xyyyyxy

 

์œ„์™€ ๊ฐ™์€ ์ž…๋ ฅ์ด ์ฃผ์–ด์กŒ์„ ๊ฒฝ์šฐ ์ •๋‹ต์€ 1์ด๋‹ค.

ํ•˜์ง€๋งŒ ๋‚ด ์ฝ”๋“œ๋Š” 2๊ฐ€ ๋‚˜์˜จ๋‹ค.

์™œ๋ƒํ•˜๋ฉด ๋’ค์˜ y๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์•ž์˜ x๋ฅผ ์ œ๊ฑฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

1
yxyyyyx

 

๋ฐ˜๋Œ€๋กœ ์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์˜ฌ๋ฐ”๋ฅด๊ฒŒ 1์ด ์ถœ๋ ฅ๋˜์—ˆ๋‹ค.

์ฆ‰, ํ˜„์žฌ ๊ตฌํ˜„๋œ ์ฝ”๋“œ๋กœ๋Š” ์•ž๋ถ€๋ถ„์˜ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•ด์•ผ์ง€๋งŒ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ์ƒ๊ฐํ•œ ๋ฐฉ์‹์€ ๊ฐ„๋‹จํ•˜๋‹ค.

์ „์ฒด ๋ฌธ์ž์—ด์—์„œ ๋‹ค๋ฅธ ๋ถ€๋ถ„์„ ์ฐพ๊ณ  ๊ทธ ๋‹ค๋ฅธ ๋ถ€๋ถ„์•ˆ์˜ ๋ฌธ์ž์—ด์ด ํšŒ๋ฌธ์ผ ๊ฒฝ์šฐ์—๋Š” ์œ ์‚ฌํšŒ๋ฌธ์ด๋‹ค.

  1. start์™€ end ์˜ ๋ฌธ์ž๊ฐ€ ๋‹ค๋ฅผ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜์—ฌ ๋‹ค๋ฅธ ๋ถ€๋ถ„ ์ฐพ๊ธฐ
  2. ๋งŒ์•ฝ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค๋ฉด ํšŒ๋ฌธ์ด๋‹ค.
  3. ๋‹ค๋ฅธ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด
    1. ์ด๋ฏธ ํ•œ๋ฒˆ ์ œ๊ฑฐํ–ˆ์„ ๊ฒฝ์šฐ์ด๋ฉด ํšŒ๋ฌธ์ด ์•„๋‹ˆ๋‹ค.
    2. ์•ž์˜ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•ด start + 1 ~ end ๊นŒ์ง€์˜ ๋ฌธ์ž์—ด์ด ํšŒ๋ฌธ์ธ์ง€ ํ™•์ธ
    3. ๋’ค์˜ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•ด start ~ end - 1 ๊นŒ์ง€์˜ ๋ฌธ์ž์—ด์ด ํšŒ๋ฌธ์ธ์ง€ ํ™•์ธ
    4. ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ผ๋„ 0์ด ๋ฐ˜ํ™˜๋˜๋Š” ํšŒ๋ฌธ์ด๋ฉด ์œ ์‚ฌํšŒ๋ฌธ์ด๋‹ค.
    5. ์•„๋‹ˆ๋ฉด ํšŒ๋ฌธ์ด ์•„๋‹ˆ๋‹ค.


๐Ÿ€ ํ’€์ด ๐Ÿ€

package Baekjoon;

import java.io.*;

public class String17609 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int t = Integer.parseInt(br.readLine());
        for(int i = 0; i < t; i++) {
            String s = br.readLine();
            bw.write(isPalindrome(s, 0, s.length()-1, false) + "\n");
        }
        bw.flush();
        bw.close();
    }

    /**
     * ํŒฐ๋ฆฐ๋“œ๋กฌ ๋ฌธ์ž์—ด์ธ์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜
     * @param s ๋ฌธ์ž์—ด
     * @param start ํ˜„์žฌ ํƒ์ƒ‰ํ•˜๊ณ  ์žˆ๋Š” ์•ž ์ธ๋ฑ์Šค
     * @param end ํ˜„์žฌ ํƒ์ƒ‰ํ•˜๊ณ  ์žˆ๋Š” ๋’ค ์ธ๋ฑ์Šค
     * @param remove ์œ ์‚ฌํšŒ๋ฌธ์ธ์ง€ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ณ€์ˆ˜
     * @return ํšŒ๋ฌธ 0, ์œ ์‚ฌํšŒ๋ฌธ 1, ์•„๋‹Œ ๊ฒฝ์šฐ 2
     */
    public static int isPalindrome(String s, int start, int end, boolean remove) {
        boolean flag = false;
        while(start <= end) {
            if(s.charAt(start) == s.charAt(end)) {
                start++;
                end--;
            }
            else {
                flag = true;
                break;
            }
        }

        if(flag) {
            if (remove) {
                return 2;
            }
            int front = isPalindrome(s, start+1, end, true);
            int back = isPalindrome(s, start, end-1, true);
            if(front == 0 || back == 0) {
                return 1;
            }
            return 2;
        }
        return 0;
    }
}
728x90