BackJoon_1254

위서연·2023년 5월 1일

BackJoon

목록 보기
5/5

백준 1254 문제

[1차시도]

public static void main(String[] args) throws IOException {
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      String S = br.readLine();
      Deque<String> deque = new ArrayDeque<String>();
      int cnt = S.length();

      for (String s : S.split("")) {
          deque.addLast(s);
      }

      while (!deque.isEmpty()){

          if (!deque.peekFirst().equals(deque.peekLast())){
              deque.addLast(deque.peekFirst());
              cnt++;
              System.out.println(deque);

          } else if (deque.peekFirst().equals(deque.peekLast())){
              deque.pollFirst();
              deque.pollLast();
              System.out.println(deque);
          }
      }
      System.out.println(cnt);
  }
}

예제는 모두 맞았는데 오류가 나서 다른 반례를 찾아보니
'aabca' 실제 답은 'aabcacbaa'로 9가 나와야 하지만
코드 상 첫번째 a와 마지막 a가 소거되어 답이 7이 나왔다

열심히 만든 코드인데 다른 점을 잘 못찾겠어서 다른 분들의 해설을 좀 참고해 보니,
deque를 사용하지 않고 그냥 문자열 안에서 palindrome이 가능한 부분을 제외하고 아닌 부분을 더해주는 방법으로 푸셨길래 따라해 보았다!


[2차시도]

public static void main(String[] args) throws IOException {
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      String S = br.readLine();
      int cnt = S.length();

      for (int i = 0; i < S.length(); i++) {
          if (isPalindrome(S.substring(i))){
              break;
          }
          cnt++;
      }
      System.out.println(cnt);
  }

  public static boolean isPalindrome (String S){
      int start = 0 ;
      int end = S.length()-1;
      while (start <= end){
          if (S.charAt(start) != S.charAt(end)) {
              return false;
          }
          start++;
          end--;
      }
      return true;
  }
}

👍 내생각
구글링이 가능한 것에 감사하며,,

① isPalindrome이라는 함수를 만들어서 맨 뒤와 맨 앞의 글자가 같은지 체크해줌
② 주어진 글자수를 substring하면서 팰린드롬이 맞는 부분을 찾는다.
③ 팰린드롬이 아니면 정답으로 출력될 cnt에 1씩 더해준다.
(즉 팰린드롬이 되려면 뒤에 다른 글자가 하나 붙어야 된다는 의미)
④ 기존 cnt값은 주어진 문자열의 길이로 설정해준다.


🤔배운내용
팰린드롬이라는 단어를 보자마자 무슨 파블로프의 개처럼 deque를 떠올리지 말자..
문제를 보다 쉽게 풀 수 있는 방법이 있을지 많이 고민하자
(때로는 쉬운 방법으로 풀 수 있다)

사실 지금 푼 코드가 생각을 못해낼 정도는 아니였는데, 생각의 틀에 갇혀버린거 같다
아직은 시간에 촉박해 하지 말고, 문제를 열심히 푸는 걸로!

0개의 댓글