뚱땅뚱땅

[문제] 백준 1152번 단어 공부 본문

알고리즘/백준

[문제] 백준 1152번 단어 공부

양순이 2021. 1. 19. 21:53
728x90

* 출처: 백준 단계별로 풀어보기- 문자열 편

 

 

 

이것 역시 구구절절 코딩해서 시간이 많이 소요됐다. 정답자 확인하니 소요 시간이 나의 1/4이다..

import java.util.Scanner;

public class Main {
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		int alpha[] = new int[26];
		int answer = 0;
		int howmany = 0;
		String s = sc.next().toUpperCase();	//모든 문자 대문자화.
		
		int len = s.length();
		int max = 0;
		for(int i=0;i<len;i++) {
			alpha[s.charAt(i)- 'A']++;
		}
		
		for(int i=0;i<26;i++) {
			max = Math.max(max, alpha[i]);
		}
		for(int i= 0;i<26;i++) {
			if(alpha[i] == max) {
				answer = i;
				howmany++;
			}
		}
		if(howmany>1) System.out.println("?");
		else {
			System.out.printf("%c", (answer+'A'));
		}

	}
}

 

아래는 간소화된 코드. ?의 아스키코드가 63인걸 알고 있어야 풀 수 있는 듯 하다.

import java.io.*;

public class Main {
	public static void main(String[] args) throws Exception {
		int[] arr = new int[26];
		
		int c = System.in.read();
		
		while(c > 64) {
			// 공백을 입력받는 순간 종료
			if(c < 91)
				arr[c-'A']++;
			else
				arr[c-'a']++;
			
			c =- System.in.read();
		}
		int max = -1;
		int ch = -2;	// ? : 63
		for(int i=0;i<26;i++) {
			if(arr[i]>max) {
				max = arr[i];
				ch = i;
			}
			else if(arr[i] == max)
				ch = -2;
		}
		System.out.println((char)(ch+65));
	}
}
728x90
Comments