티스토리 뷰
문제
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.
č | c= |
ć | c- |
dž | dz= |
đ | d- |
lj | lj |
nj | nj |
š | s= |
ž | z= |
예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.
입력
첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.
단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.
출력
입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
코드의 효율을 올리기 위해 변경된 알파벳의 공통점을 생각해보았다.
변경된 알파벳은 모두 마지막이 '=, -, j'로 끝난다.
로직
1. cnt에 주어진 단어의 알파벳 수를 저장한다.
2. 크로아티 알파벳을 찾으면서 cnt를 감소한다.
(dz=를 찾은 경우 2 감소)
3. cnt를 출력한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BJ2941 {
public static void main(String[] args) throws IOException {
// 1. 단어 입력 받기
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String word = br.readLine();
int cnt = word.length();
// 2. 크로아티 알파벳 찾기 ( =,-,j 찾기 )
for (int i = 1; i < word.length(); i++) {
if(word.charAt(i) == '=') {
if(word.charAt(i - 1) == 'c' || word.charAt(i - 1) == 's' || word.charAt(i - 1) == 'z') {
cnt--;
// 'dz='의 경우 확인
if(i - 1 > 0 && word.charAt(i - 1) == 'z' && word.charAt(i - 2) == 'd') {
cnt--;
}
i++;
}
} else if (word.charAt(i) == '-') {
if(word.charAt(i - 1) == 'c' || word.charAt(i - 1) == 'd') {
cnt--;
i++;
}
} else if (word.charAt(i) == 'j') {
if(word.charAt(i - 1) == 'l' || word.charAt(i - 1) == 'n') {
cnt--;
i++;
}
}
}
System.out.println(cnt);
}
}
내 코드가 시간이 비교적 짧아서 뿌듯하다. 조건문을 효율적으로 돌린 보람!
같은 언어임에도 코드를 훨씬 간결하게 작성한 사람들이 있길래 코드를 훔쳐봤다.
보니 변경된 알파벳을 문자열 배열로 저장을 해두고
본래 단어에 해당되는 문자열을 모두 'a'로 replace하여
한 문자로 치환하였다.
잘 배우고 갑니다~~~~
'Algorithm' 카테고리의 다른 글
[백준14888번/JAVA] 연산자 끼워넣기 (2) | 2024.01.23 |
---|---|
브루트 포스(Brute Force) (0) | 2024.01.21 |
[백준 4673번/JAVA] 셀프 넘버 (1) | 2024.01.15 |
[백준 2739번/파이썬] 구구단 (0) | 2023.08.16 |
[백준 11047번/자바] 동전 0 (0) | 2023.08.14 |
- Total
- Today
- Yesterday
- RDD
- 웹
- 백준9375번
- 그리디 알고리즘
- 동덕여대 컴퓨터학과
- 컴퓨터학과
- 백준 1004
- 컴공
- 리트코드 1768
- 아이엘츠
- 백준
- 리트코드 1768 해석
- 코딩
- 코틀린
- 자바 9375
- 컴과
- BFS
- 생활코딩
- 동덕여대
- 자바
- 프로그래밍
- 스프링 강의
- 백준 2108
- 스프링부트
- 안드로이드
- 알고리즘
- 자바 1004번
- 스파크
- bcrypaswordencoder
- 개발
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |