문제 : boj25630
필요 알고리즘 개념
- 구현, 문자열
- 문자열 파싱을 통해 구현할 수 있다.
※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.
풀이
소떡소떡에서 팰린드롬이 되려면 몇 개를 변경해야 할지 알아내야 한다.
[1] 우선 홀수일 경우 중간에 끼워져 있는건 어차피 팰린드롬에 무관하므로 상관 없다
[2] 반반으로 나누자 (필요없는 부분 제외)
[3] 한쪽을 거꾸로 돌려서 비교해봤을 때 서로 다른 갯수가 문제에서 원하는 답이다.
로직이 파악됬으니 이제 이걸 코드로 구현해주면 된다.
for (int i = 0; i < n/2; i++) // n/2를 정수로 내림했으므로 n이 홀수라도 중간껀 알아서 버려진다.
if (s.charAt(i) != s.charAt(n-1-i)) // i는 가장 왼쪽꺼, n-1-i는 가장 오른쪽꺼다. 거기부터 중앙으로 오면서 비교한다.
cnt++; // 서로 다른 부분을 찾는다면 카운팅한다.
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String s = br.readLine();
int cnt = 0;
for (int i = 0; i < n/2; i++)
if (s.charAt(i) != s.charAt(n-1-i))
cnt++;
System.out.println(cnt);
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
[자바] 백준 23027 - 1번부터 문제의 상태가…? (java) (0) | 2022.12.05 |
---|---|
[자바] 백준 25305 - 커트라인 (java) (0) | 2022.12.04 |
[자바] 백준 1253 - 좋다 (java) (1) | 2022.12.02 |
[자바] 백준 20976 - The Second Largest Integer (java) (0) | 2022.12.02 |
[자바] 백준 8949 - 대충 더해 (java) (0) | 2022.11.30 |
댓글