일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 산술 연산자
- 논리 연산자
- SpringBoot
- BufferedReader
- A+B - 6
- 조건 연산자
- 코딩테스트
- 11021
- 비교 연산자
- nextInt()
- nextline()
- 그라운드시소
- 백준10953
- BufferedWriter
- 10953
- 연산자 우선순위
- 백준15552
- 서버개발
- 인스턴스
- 15552
- 백준
- Java
- 코딩은체육과목입니다
- 알고리즘
- A+B - 7
- 인스턴스화
- 문자열메서드
- 포맷팅
- 이너클래스
- 백준11021
- Today
- Total
Coded by Juny
크로아티아 알파벳 본문
문제
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.
크로아티아 알파벳변경č | c= |
ć | c- |
dž | dz= |
đ | d- |
lj | lj |
nj | nj |
š | s= |
ž | z= |
예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.
입력
첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.
단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.
출력
입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
제출
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class B_0606 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String word = br.readLine().trim();
String[] sign = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
int[] signNum = {1, 1, 2, 1, 1, 1, 1, 1};
int result = word.length();
for(int i = 0; i < sign.length; i++){
if (word.contains(sign[i])){
result -= signNum[i];
}
}
System.out.println(result);
}
}
첫 번째 제출 코드
3번 째 문자를 제외한 문자들이 2, 3개씩인데 문제에서 하나의 알파벳으로 취급하라했으므로 각각 int 배열로 1과 2를 이용해 총 자릿수에서 빼주었다. 보통의 입력값들이 잘 해결되어 뿌듯해하고 있던 찰나, 아차차... for문에서 contains함수의 boolean 반환타입에 의해 중복해서 등장할 때는 한번밖에 빼주지 못하는 문제가 발생하였다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class B_0606 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String word = br.readLine().trim();
String[] sign = {"c=", "c-", "d-", "lj", "nj", "s=", "z="};
String sign2 = "dz=";
// 1. 'dz='는 3자리의 문자가 1자리로 되므로 우선 처리
word = word.replaceAll(sign2, "x");
// 2. 나머지 2자리의 문자들을 찾아 1자리로 변환해주는 작업
for(int i = 0; i < sign.length; i++){
word = word.replaceAll(sign[i], "x");
}
System.out.println(word.length());
}
}
두 번째 제출 코드
회고
결국 마지막 최종 제출 코드처럼 너무 돌아가지 않기로 하고 replace()를 이용해 3개의 문자, 2개의 문자를 각각 따로 처리해서 대체 문자를 넣어 자리수를 채워주기로 했다.. 가끔은 복잡하게 하지 않고 간단하게 코딩해보기