[BOJ] 2941

Organ·2023년 9월 21일
0

[문제 풀이]

목록 보기
42/123

크로아티아 알파벳

문제

입출력 및 예제

내 풀이1(오답)

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

public class Main
{
	public static void main(String[] args) throws IOException
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String name = br.readLine();
		int count  = 0;
		int count1 = 0;
		
		for(int i = 0; i < name.length(); i++)
		{
			if(name.charAt(i) == 'c')
			{
				if(name.charAt(i + 1) == '=' || name.charAt(i + 1) == '-')
				{
					count++;
					count1 = count1 + 2;
				}
			}

			else if(name.charAt(i) == 'd')
			{
				if(name.charAt(i + 1) == 'z')
				{
					if(name.charAt(i + 2) == '=')
					{
						count = count + 2;
						count1 = count1 + 3;
					}
				}
				else if(name.charAt(i + 1) == '-')
				{
					count++;
					count1 = count1 + 2;
				}
			}

			else if(name.charAt(i) == 'l')
			{
				if(name.charAt(i + 1) == 'j')
				{
					count++;
					count1 = count1 + 2;
				}
			}

			else if(name.charAt(i) == 'n')
			{
				if(name.charAt(i + 1) == 'j')
				{
					count++;
					count1 = count1 + 2;
				}
			}

			else if(name.charAt(i) == 's')
			{
				if(name.charAt(i + 1) == '=')
				{
					count++;
					count1 = count1 + 2;
				}
			}

			else if(name.charAt(i) == 'z')
			{
				if(name.charAt(i + 1) == '=')
				{
					count++;
					count1 = count1 + 2;
				}
			}
		}

		count = name.length() + count - count1;

		System.out.print(count);
	}
}

입력받은 문자열의 길이에서 count 2글자이상의 크로아티아 알파벳을 1로 세주고, count1은 만약 2글자의 크로아티아 알파벳이면 2를 더해주었고 그걸로 연산을 해서 결과를 출력하려고 했고 예제까지는 통과했으나 런타임에러

name.length() 범위에서 오류가 나는 것 같아서 그 부분을 고쳐주고 조금 깔끔하게 정리했다. 그래도 오류가 나서 계속 보다가

내 풀이2(오답)

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

public class Main
{
	public static void main(String[] args) throws IOException
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String name = br.readLine();
		int count  = 0;
		int count1 = 0;
		
		for(int i = 0; i < name.length(); i++)
		{
			if(i < name.length() - 1)
			{
				if(name.charAt(i) == 'c')
				{
					if(name.charAt(i + 1) == '=' || name.charAt(i + 1) == '-')
					{
						count++;
						count1 = count1 + 2;
					}
				}
			}
			else if(i < name.length() - 2)
			{
				if(name.charAt(i) == 'd')
				{
					if(name.charAt(i + 1) == 'z')
					{
						if(name.charAt(i + 2) == '=')
						{
							count = count + 2;
							count1 = count1 + 3;
						}
					}
					else if(name.charAt(i + 1) == '-')
					{
						count++;
						count1 = count1 + 2;
					}
				}
			}
			
			else if(i < name.length() - 1)
			{
				if(name.charAt(i) == 'l')
				{
					if(name.charAt(i + 1) == 'j')
					{
						count++;
						count1 = count1 + 2;
					}
				}
			}
			
			else if(i < name.length() - 1)
			{
				if(name.charAt(i) == 'n')
				{
					if(name.charAt(i + 1) == 'j')
					{
						count++;
						count1 = count1 + 2;
					}
				}
			}
			
			else if(i < name.length() - 1)
			{
				if(name.charAt(i) == 's')
				{
					if(name.charAt(i + 1) == '=')
					{
						count++;
						count1 = count1 + 2;
					}
				}
			}
			
			else if(i < name.length() - 1)
			{
				if(name.charAt(i) == 'z')
				{
					if(name.charAt(i + 1) == '=')
					{
						count++;
						count1 = count1 + 2;
					}
				}
			}
		}

		count = name.length() + count - count1;

		System.out.print(count);
	}
}

이 상태까지 왔는데 i < name.length() - 2 일 때만 d-를 체크하므로 오답이 난다는 걸 알고 바꿔줘서 통과했다.

내 풀이

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

public class Main
{
	public static void main(String[] args) throws IOException
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String name = br.readLine();
		int count  = 0;
		int count1 = 0;
		
		for(int i = 0; i < name.length(); i++)
		{
			if(i < name.length() - 1)
			{
				if(name.charAt(i) == 'c')
				{
					if(name.charAt(i + 1) == '=' || name.charAt(i + 1) == '-')
					{
						count++;
						count1 = count1 + 2;
					}
				}

				else if(name.charAt(i) == 'l')
				{
					if(name.charAt(i + 1) == 'j')
					{
						count++;
						count1 = count1 + 2;
					}
				}

				else if(name.charAt(i) == 'n')
				{
					if(name.charAt(i + 1) == 'j')
					{
						count++;
						count1 = count1 + 2;
					}
				}

				else if(name.charAt(i) == 's')
				{
					if(name.charAt(i + 1) == '=')
					{
						count++;
						count1 = count1 + 2;
					}
				}

				else if(name.charAt(i) == 'z')
				{
					if(name.charAt(i + 1) == '=')
					{
						count++;
						count1 = count1 + 2;
					}
				}

				else if(name.charAt(i) == 'd')
				{
					if(name.charAt(i + 1) == '-')
					{
						count++;
						count1 = count1 + 2;
					}
				}
			}
			if(i < name.length() - 2)
			{
				if(name.charAt(i) == 'd')
				{
					if(name.charAt(i + 1) == 'z')
					{
						if(name.charAt(i + 2) == '=')
						{
							count = count + 2;
							count1 = count1 + 3;
						}
					}
				}
			}
		}

		count = name.length() + count - count1;

		System.out.print(count);
	}
}

다른 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Main {
	public static void main(String[] args) throws IOException {
    
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str = br.readLine();
		
		int len = str.length();
		int count = 0;
 
		for (int i = 0; i < len; i++) {
 
			char ch = str.charAt(i);
 
			if(ch == 'c' && i < len - 1) {			// 만약 ch 가 c 라면?
				//만약 ch 다음 문자가 '=' 또는 '-' 이라면?
				if(str.charAt(i + 1) == '=' || str.charAt(i + 1) == '-') {		
					// i+1 까지가 하나의 문자이므로 다음 문자를 건너 뛰기 위해 1 증가
					i++;		
				}
				
			}
		    
			else if(ch == 'd' && i < len - 1) {
				if(str.charAt(i + 1) == '-') {	// d- 일 경우
						i++;
					}
				else if(str.charAt(i + 1) == 'z' && i < len - 2) {
					
					if(str.charAt(i + 2) == '=') {	// dz= 일 경우
						i += 2;
					}
				}
			}
		    
			else if((ch == 'l' || ch == 'n') && i < len - 1) {
				if(str.charAt(i + 1) == 'j') {	// lj 또는 nj 일 경우
					i++;
				}
			}
		    
 
			else if((ch == 's' || ch == 'z') && i < len - 1) {
				if(str.charAt(i + 1) == '=') {	// s= 또는z= 일 경우
					i++;
				}
			
		    }
		    
			count++;
 
		}
 
		System.out.println(count);
	}
}

정리

확실히 count를 뽑는 방식이 나보다 깔끔하다.

출처

https://st-lab.tistory.com/68

0개의 댓글