본문 바로가기
ONLINE JUDGE/문자열

[백준2941] 크로아티아 알파벳

by W_W_Woody 2022. 3. 18.

https://www.acmicpc.net/problem/2941

 

2941번: 크로아티아 알파벳

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=

www.acmicpc.net


indexOf() + StringBuffer.replace(a,b,"x")

package s07_string;

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

public class MJ_09_2941_2 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String[] arr = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};

		String str = br.readLine();
		StringBuffer sb = new StringBuffer();	// 버퍼 사용(원하는 위치의 문자를 변환하기 위함)!!!!
		sb.append(str); //입력받은 문장 넣고
		br.close();

		int count = 0; // 크로아티아 문자의 갯수 세는 int 변수선언

		for(int i=0; i<arr.length; i++) {
			int idx = sb.indexOf(arr[i]);  // 크파벳이 포함된 문자열 시작 위치

			while(idx != -1) {  // 크파벳이 존재하는 동안 (존재안하면 -1반환 하니까)
				count++;	// 문자 갯수 count
				int idx2 = idx + arr[i].length();  // 사용된 크파벳의 끝 위치
				sb.replace(idx, idx2, "0");  // 크파벳을 임의의 문자 "0"으로 변환 //*시작위치부터 끝 위치를 0으로 변환
/*
 * StringBuffer 클래스의 replace 멤버 메서드는 특정 구간의 내용을 원하는 내용으로 대체할 때 사용합니다. 
 * 그리고 내용의 순서를 뒤집을 때 reverse 멤버 메서드를 사용합니다.
 */
				idx = sb.indexOf(arr[i]);  // 같은 크파벳이 사용된 위치가 있는지 다시 검색
			}
		}

		for(int i=0; i<sb.length(); i++) {
			if(sb.charAt(i) != '0')
				count++;	// 문자 갯수 count
		}

		System.out.println(count);
	}
}

String[] arr = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="}; 한번에 등록!

 

StringBuffer 클래스의 replace 멤버 메서드는 특정 구간의 내용을 원하는 내용으로 대체할 때 사용한다!!

그리고 내용의 순서를 뒤집을 때 reverse 멤버 메서드를 사용!!

 

"크로아티아 알파벳을 확인 후 임의의 문자로 변환 시켜놓고" "한번더 검사하는 것"

요게 포인트

//StringBuffer replace(int s,int e,String s)
//StringBuffer reverse()

public class Program {
	public static void main(String[] args){
		StringBuffer sb = new StringBuffer("01234567890");
		
		sb.reverse();
		System.out.println(sb);
		
		sb.replace(2, 5, "ABCDE");
		System.out.println(sb);
	}
}
reverse : 09876543210
replace : 09ABCDE543210

 

'ONLINE JUDGE > 문자열' 카테고리의 다른 글

[백준5622] 다이얼  (0) 2022.03.18
[백준2908] 상수  (0) 2022.03.11
[백준1152] 단어의 개수  (0) 2022.03.11
[백준1157] 단어 공부  (0) 2022.03.10
[백준2675] 문자열 반복  (0) 2022.03.09

댓글