본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 1157 단어 공부

by 까망 하르방 2021. 8. 31.
반응형

출처https://www.acmicpc.net/problem/1157

Approach

해당 문제는 alphabet[26]을 이용하면 해결할 수 있는 문제이다.

ex) alphabet[0] = 3; // 'A' or 'a'가 3번 나타남.

ex) alphabet[2] = 5; // 'C' or 'c'가 5번 나타남.

 

① 입력받는 문자열에 소문자/대문자가 모두 포함되는데

   출력시에는 대문자로 하므로 대문자로 처리할 수 있도록 한다.

* 아스키 코드 이용

 

아스키(Ascii) 코드 활용

아스키(Ascii) 코드 활용 프로그래밍 문제를 풀 때(PS)는 0 ~ 9 숫자를 문자로 표현하는 경우도 있고, 반대로 "A ~ Z" 혹은 "a ~ z" 문자를 정수형으로 이용하는 경우가 있다. 이때 이용하는 것이 아스키(

zoosso.tistory.com

- 대문자 'A' 아스키코드 값 = 65

- 대문자 'a' 아스키코드 값 = 97

 

② 가장 많은 문자열이 여러개인지 확인한다.

③ 여러가지가 아닌 경우에는 하나의 문자만,

    여러가지인 경우, '?' 출력 한다.

 

C++

#include <iostream>
#include <string>

using namespace std;

string str;
int alphabet[26], maxCnt;
char ans = '?';

int main()
{
	// freopen("input.txt", "r", stdin);
	cin >> str;
	for (char ch : str)
	{
		if ('a' <= ch) ch = ch - 32; // 소문자를 대문자로 변경
		alphabet[ch - 'A']++; // 0 ~ 26로 인덱스 조정
	}

	for (int ch = 0; ch <= 'Z' - 'A'; ch++) // 0 ~ 26
	{
		if (alphabet[ch] > maxCnt)
		{
			maxCnt = alphabet[ch];
			ans = ch + 65; // 출력시에는 소문자에서 대문자로
		}
		else if (alphabet[ch] == maxCnt)
		{
			// 최대 개수가 여러가지인 경우
			ans = '?';
		}
	}

	printf("%c\n", ans);
}

 

Java

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		// 문자열을 입력 받는다.
		String str = sc.nextLine();
		
		// 입력받은 문자열을 대,소문자 중 하나로 통일한다.
		str = str.toUpperCase();
		
		// 변환된 문자열에서 아스키코드를 이용한다.
		// 알파벳 배열을 만든다(배열 크기 : 26개)
		int[] arr = new int[26];
		
		// 문자 하나하나 체크하면 배열의 원소를 업데이트한다.
		for(int i=0; i < str.length(); i++){
			int idx = str.charAt(i) - 65;
			if(idx >= 0){ // 아스키 코드상 공백 문자는 32로 여기서는 -33으로 계산된다.
				arr[idx]++;
			}
		}
		int max = 0;
		int idx = -1;
		// 배열 중 원소가 가장 큰 값을 확인하며
		for(int i=0; i < arr.length; i++){
			if(max < arr[i]){
				max = arr[i];
				idx = i;
			}
		}

		int smaeCnt = 0;
		for(int i=0; i < arr.length; i++){
			if(max == arr[i]){
				smaeCnt++;
			}
		}
		
		// 큰 값이 2개 이상이면 '?' 아니면 해당 (대)문자 출력 
		if(smaeCnt >= 2){
			System.out.println("?");
		}else{
			System.out.println((char)(idx + 65));
		}
	}
}
반응형

댓글