[JAVA] 백준_단계별 문자열

2908, 2941, 1316

Posted by iheese on May 20, 2022 · 10 mins read

2908 상수

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

public class Main {
		public static void main(String[] args) throws IOException  {
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			
			int reversea=0;
			int reverseb=0;
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			
			while(a!=0) {
				reversea= reversea*10;
				reversea= reversea+a%10;
				a=a/10;
			}
			while(b!=0) {
				reverseb= reverseb*10;
				reverseb= reverseb+b%10;
				b=b/10;
			}
			
			if(reversea>reverseb) {
				System.out.println(reversea);
			}else {
				System.out.println(reverseb);
			}
		}
	}	
  • 숫자 뒤집는 방법 찾아서 응용해서 풀었던 문제
import java.util.Scanner;
 
public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int A = in.nextInt();
		int B = in.nextInt();
        in.close();
		A = Integer.parseInt(new StringBuilder().append(A).reverse().toString());
		B = Integer.parseInt(new StringBuilder().append(B).reverse().toString());
		System.out.print(A > B ? A : B);

	}
}

  • StringBuilder에 reverse() 라는 좋은 기능이 있다.


2941 크로아티아 알파벳

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[] = {"c=","c-","dz=","d-","lj","nj","s=","z="};
				String s = br.readLine();
				for(int i =0; i<str.length;i++) {
					if(s.contains(str[i])) {
						s=s.replace(str[i],"!");
					}
				}
				System.out.println(s.length());
		}
	}
  • 다양한 방법을 고려했는데 이 방법이 가장 쉬웠다.
  • String.contains([String]), String.replace([old],[new]) 함수의 적절한 예시인 듯하다.


1316 그룹 단어 체커

  • 문제 이해는 중간이었는데 구현하는 부분이 어려웠다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

	
	public static void main(String[] args) throws IOException {
		int count=0;
		int N = Integer.parseInt(br.readLine());
		
		for(int i=0; i<N;i++) {
			if(check()==true) {
				count++;
				}
			}
		System.out.println(count);
	
	}
	// 그룹 단어 체커 함수
	public static boolean check() throws IOException {
		boolean[] check = new boolean[26];
        //기본으로 모두 false로 초기화된다. 알파벳 26개 boolean 초기화
		int prev =0; //이전 값 할당변수 초기화
		String str = br.readLine();
		
		for(int i =0;i<str.length();i++) {
			int now=str.charAt(i); //내가 확인하고 있는 문자
            
			if(prev!=now) { //이전 문자와 현재 문자가 다르고
				if(check[now-'a']==false) {
                	//현재 문자가 이전에 나왔던 문자가 아니면
					check[now-'a']=true;
                    // 해당 알파벳 존재한다고 알파벳배열 변경
					prev=now;
                    // prev 변수도 다음 now 체크를 위해 앞으로
				}else {
					return false;
                    //now 이전에 나온 문자면 false 그룹단어 아님
				}
			}else { 
				continue; //이전 문자와 현재 문자가 같다
                		  // 뒤 문자도 같을 수 있으니 다음으로 넘어가보자
			}
		}
		return true;  // 다 돌면 그룹단어 맞음
	}
}
  • 함수를 만들어서 푸는 방식이었다.
  • BufferedReader을 static 함수에서 사용하기 위해 main 메소드 밖에서 static으로 호출해주어야 한다.


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));
		
		int n = Integer.parseInt(br.readLine());
		
		int cnt = 0;
		
		for(int i =0;i<n;i++) {
			String s = br.readLine();
			
			boolean check[] =new boolean[26];
            //알파벳 boolean 배열 생성
			boolean temp =true;
			
			for(int j =0;j<s.length();j++) {
				int index =s.charAt(j)-'a';
				if(check[index]) { //이미 나온 알파벳이고
					if(s.charAt(j)!=s.charAt(j-1)) {
                    // 전 알파벳과 다르다면
						temp=false; //그룹 단어 아님
						break;
					}
				}else { //이미 나온 알파벳 아님
					check[index]=true;
				}
			}
            //다해서 temp가 true면 그룹단어 맞음
			if(temp) cnt++;
		}
		System.out.println(cnt);
	}
}
	
  • 나에게는 더 직관적으로 이해가 잘되었던 방법이다.


Reference: