코딩 테스트

[코딩테스트] 백준 2941번: 크로아티아 알파벳

dev.jelee 2025. 6. 18. 22:14

# 문제

 

# 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BOJ2941_v1 {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    String input = br.readLine(); // 입력받기
    String[] arr = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="}; // 크로아티아 저장
    int count = 0;
    int result = 0;

    for (int i = 0; i < arr.length; i++) { // arr 길이 만큼 반복

      while (input.contains(arr[i])) { // input에 arr[i]가 있으면 true
        count++; // 있으면 count 1씩 증가 해주기
        // input에 arr[i] 처음에 있는 것만 제거하고 ,(쉼표)로 바꾸기 
        input = input.replaceFirst(arr[i], ","); 
      }
    } 

    // input에 있는 ,(쉼표)를 전부 없애기
    input = input.replaceAll(",", "");
    result = count + input.length(); // 제거한 크로아티아 수와 input 길이 더하기
    System.out.println(result); // 출력
    br.close();
  }
}

 

# 입/출력 결과

 

# 과정

  1. 입력은 BufferedReader 클래스 사용
  2. String[] arr에 크로아티아 문자 배열로 저장
  3. int count와 int result 0으로 초기화
  4. for문 사용해서 계산
    • : arr 길이 만큼 반복
    • : while문 사용해서 input에 arr[i]가 있으면 input에 arr[i]를 제거하고 ,(쉼표)로 바꾸기
  5. for문 밖에서 input에 모든 ,(쉼표)를 제거하고 "" 그 자리에 빈 문자를 추가
  6. result에 count와 input의 길이를 더하여 저장
  7. result 출력
  8. BufferedReader .close() 해주기

 

# 메모

  • 처음에 replace로 했는데 c=c= 이걸 입력하였을 때 2가 출력되어야하는데 안 되었다. 그래서 디버깅해보니까 한번에 c=가 사라지는 거였다. 그래서 chat-gpt한테 replace로 하였는데 c=c= 이 두 값이 같이 사라졌다, 나는 c= 먼저 사라지고 그 다음 것도 사라지게 하고 싶다고 하니까 replaceFirst를 알려주었다. 그래서 그때 처음으로 replaceFirst라는 것을 알게 되었다.
  • 그리고 if문으로 하니까 c= 하나만 제거가되어서 곰곰히 생각해보니 크로아티아 알파벳이 없기 전까지 무한으로 반복해야하니까 while문으로 하는 게 맞는 거 같아서 while문으로 수정하니 원하는 데로 동작을 했다.