pullwall
Well done! 코딩
pullwall
전체 방문자
오늘
어제
  • 분류 전체보기 (151)
    • 개발환경 (2)
    • java study (21)
    • 백준 단계별 (51)
    • 알고리즘 (3)
    • AI (43)
    • 클라우드 (3)
      • Kubernetes in Google (3)
    • 논문 (5)
    • 리눅스 (1)
    • AWS (4)
    • 수학 (15)
    • 기타 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Java
  • 단계별
  • Ai
  • 정렬
  • AWS
  • LLM
  • 쿠버네티스
  • 백준 단계별
  • Google
  • Kubernetes
  • 선택정렬
  • 논문리뷰
  • 알고리즘
  • 정렬알고리즘
  • 자바
  • 백준
  • 수학
  • 자바독학
  • pytorch
  • dataset

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
pullwall

Well done! 코딩

[Java] 백준 2941: 크로아티아 알파벳
백준 단계별

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

2023. 1. 19. 14:34
728x90

우선적으로 필요한 것은 단어를 입력받고 알파벳 갯수를 카운팅하는 변수이다.

 

Scanner sc = new Scanner(System.in);
		
String word = sc.nextLine();
		
int cnt = 0;

 

이후 단어의 길이만큼 반복문을 돌며 알파벳을 검사한다. 가장 큰 틀로 아래와 같은 구조를 만들 수 있다.

첫번째 반복할 때는 charAt(0)이 작동하여 첫번째 글자를 검사하게 된다.

for(int i=0 ; i<word.length() ; i++){
	char ch = word.charAt(i);
    }

 

다음으로 위 반복문 안에 들어갈 알고리즘을 짤 차례이다.

우리가 고려해야 할 것은 알파벳 표에 주어진 것 뿐이다.

c를 인식했을 때 그 다음 글자가 = 인지 -인지 검사하고

d가 들어왔을 때 그 다음 글자가 z=인지 -인지 검사하고..

해야 하지만 여기서 문제가 발생한다.

 

c를 인식했을 때 c가 마지막 글자에 있다면 그 다음 글자를 검사하는 과정에서 오류가 발생하게 된다.

이 문자열은 c에서 끝나기 때문에 다음 문자를 불러올 수 없기 때문이다.

 

따라서 c= 혹은 c- 를 검사할 땐 i<word.length()-1 을 붙여 다음에 올 글자가 있는 경우에만 검사해줘야 한다.

아닌 경우는 그냥 알파벳 c 자체로 흘려서 아무 if문도 통과하지 않게 만들면 된다.

이 경우에 for문 맨 끝애 cnt++를 설정하여 아무 if문도 통과하지 않았을 경우, 즉 위 표에 해당하지 않는 경우에

카운트를 하나 증가시켜야 할 것이다.

 

 

최종 코드

import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		String word = sc.nextLine();
		
		int cnt = 0;
		
		for(int i=0 ; i<word.length() ; i++) {
			char ch = word.charAt(i);
			
			if(ch=='c') {
				if(i<word.length()-1) { //마지막 자리에 c가 올 경우 발생하는 에러를 방지
					if(word.charAt(i+1)=='=') {
						i++;
					}
					else if(word.charAt(i+1)=='-') {
						i++;
					}
				}
			}
			
			else if(ch=='d') {
				if(i<word.length()-1) { //dz를 검사해야 하는데 d가 마지막에 위치하면 안되니까
					if(word.charAt(i+1)=='z') {
						if(i<word.length()-2) { //dz=검사를 위해
							if(word.charAt(i+2)=='=') { //dz=
								i+=2;
							}
						}
					}
					else if(word.charAt(i+1)=='-') { //d-
						i++;
					}
				}
			}
			
			else if(ch == 'l') {
				if(i<word.length()-1) {
					if(word.charAt(i+1)=='j') { //lj
						i++;
					}
				}
			}
			
			else if(ch == 'n') {
				if(i<word.length()-1) {
					if(word.charAt(i+1)=='j') { //nj
						i++;
					}
				}
			}
			
			else if(ch == 's') {
				if(i<word.length()-1) {
					if(word.charAt(i+1)=='=') {
						i++;
					}
				}
			}
			
			else if(ch == 'z') {
				if(i<word.length()-1) {
					if(word.charAt(i+1) == '=') {
						i++;
					}
				}
			}
			cnt++; //다음 문자 건너뜀 =이거나 -일 경우에 한 문자로 봐줬기 때문
		}
		System.out.println(cnt);
	}
}

 

728x90

'백준 단계별' 카테고리의 다른 글

[Java] 백준 1712: 손익분기점  (0) 2023.01.25
[Java] 백준 1316: 그룹 단어 체커  (0) 2023.01.25
[Java] 백준 5622: 다이얼  (0) 2023.01.18
[Java] 백준 2908: 상수  (0) 2023.01.18
[Java] 백준 1152: 단어의 개수  (0) 2023.01.17
    '백준 단계별' 카테고리의 다른 글
    • [Java] 백준 1712: 손익분기점
    • [Java] 백준 1316: 그룹 단어 체커
    • [Java] 백준 5622: 다이얼
    • [Java] 백준 2908: 상수
    pullwall
    pullwall

    티스토리툴바