본문 바로가기
백준

[백준] 단계별로 풀어보기(단계:7,문자열,JAVA)1157번, 단어 공부

by 열정적인 이찬형 2021. 12. 20.

문제 링크

1157번: 단어 공부
 
www.acmicpc.net

주의사항

  • JAVA를 사용하여 프로그램을 사용하였습니다.
  • 백준에서 코드를 작성하였을 때 아래 형태에서 Main에서 결과가 출력되어야 합니다.
public class Main{ 	
	public static void main(String[] args){
    }
}

문제 설명


접근 방법

  • BufferedReader를 사용하여 입력값을 저장합니다.
  • for문을 통해서 알파벳 반복횟수를 배열에 저장한다.
  • 알파벳 소문자는 아스키코드 97부터 시작하며 대문자는 65부터 시작하므로 65와 97을 빼주었습니다.
  • 횟수가 중복되면 다른 결과를 출력해야하기 때문에 확인 변수와 최대값, 최대값 인덱스를 만들었습니다.
  • for문을 통해서 배열에 가장 큰 값과 인덱스를 찾았습니다.
  • 그 결과를 대문자 알파벳으로 표현하기 때문에 최대값 인덱스에 65를 더하였습니다.
  • 결과를 최대값이 중복되었는지에 따라 bw에 저장하였습니다.
  • BufferedWriter을 통하여 한 번에 출력하였습니다.

결과 코드

import java.util.*;
import java.io.*;
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //입력 값을 받는 BufferedReader
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        //결과를 출력하는 BufferedWriter
        String text = br.readLine();			//입력값 저장
        int[] arr = new int[26];			//알파벳 반복 횟수 배열
        for(int i=0;i<text.length();i++){		//알파벳 반복 횟수 배열에 저장
            int temp = text.charAt(i);
            if(temp<97){
                temp = temp-65;
            }else{
                temp = temp-97;}
            arr[temp]++;
        }
        int max=-1, maxindex=-1;			//최대값 관련 변수
        boolean check=false;				//max 값이 중복된 값인지 확인하는 변수
        for(int i=0;i<arr.length;i++){			//반복 횟수 최대값 구하기
            if(arr[i]>max){
                max = arr[i];
                maxindex = i;
                check = false;
            }else if(arr[i]==max){
                check = true;
            }
        }
        char result = (char)(maxindex + 65);		//최대값 char형으로 변환
        if(check){					//결과 bw에 저장
            bw.write("?\n");
        }else{
            bw.write(result+"\n");
        }
        bw.flush();					//결과 출력
        bw.close();
        br.close();
    }
}

댓글