-
[백준/BOJ] 1371번 : 가장 많은 글자 (JAVA / 자바)백준 2022. 2. 19. 16:14
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/1371
1371번: 가장 많은 글자
첫째 줄부터 글의 문장이 주어진다. 글은 최대 50개의 줄로 이루어져 있고, 각 줄은 최대 50개의 글자로 이루어져 있다. 각 줄에는 공백과 알파벳 소문자만 있다. 문장에 알파벳은 적어도 하나 이
www.acmicpc.net
- 문제 -
난이도 브론즈 2 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
(JAVA / 자바) Scanner 와 Bufferedreader
안녕하세요~ 코딩하는 코알못 코메인입니다. 이번엔 백준 문제 풀면서 계속 언급될 scanner와 bufferedreader에 대한 간단한 정리를 해볼거다. 자바에서 입력은 scanner와 bufferedreader가 있다. 우선 각자
comain.tistory.com
풀이 방법
주어진 값에서 알파벳 a부터 z까지의 개수를 세어주고, 그 중 제일 많은 알파벳을 출력하는 문제이다.
알파벳 개수를 세어주는 방법은 replace를 사용해 사용 전과 후의 길이의 차로 개수를 구했다.(replace는 문자여레서 특정 문자를 다른 문자로 바꿔준다. 바꿔주는 문잘르 ""로 하면 값을 없애주는 효과를 볼 수 있어, a를 없애주고 없애기 전과 후의 길이 차이를 보면 a의 개수를 알 수 있는 것이다.)
구해진 알파벳 개수를 a부터 구해질때마다 현재 제일 많이 나온 알파벳 개수의 값과 비교를 하고, 더 큰 경우 개수와 알파벳을 저장한다. 알파벳 개수가 현재 최대 개수와 같을 경우 알파벳만 추가해준다.(저장이 아니라 추가이기 때문에 문자열 변수에 a가 들어갔다 b도 개수가 같으면 ab가 되는 것이다.) 문제의 출력을 보면 알파벳이 여러개 나오면 알파벳 순으로 출력하라고 나와있다. 애초에 알파벳을 a부터 순서대로 돌리기 때문에 같은 개수가 여러개 나온다면 알파벳이 순서대로 저장되어지기때문에 문제가 되지 않는다.
이제 주의 할 점인데. 문자열이 한줄에서 최대 50줄까지 있다. 몇줄이 입력되어 지는지 알 수가 없기때문에 입력 범위를 정해줄 수가없다. 그렇기때문에 입력값을 문자열 변수에 저장할 때 무한루프를 사용해줘야 한다. 하지만 끝나지 않는 무한루프이기에 (물론 50번만 돌아가게 만들 수 있다.) EOF에러가 나올 수 있다. 그렇기 때문에 입력받을때는 EOF처리를 해줘야한다.
https://comain.tistory.com/218
(JAVA / 자바) EOF 에러 해결 방법
안녕하세요~ 코딩하는 코알못 코메인입니다. 이번엔 백준 문제 풀면서 계속 언급된 EOF 에러에 대한 간단한 정리를 해볼거다. (백준 문제를 푸는데 간간히 나오는 경우이고, 풀이를 적을때 추가
comain.tistory.com
EOF에러에 관한 건 위 글을 참고하자.
코드로 보자.
-풀이-
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)); //EOF처리를 위한 입력값을 받을 문자열 input String input; //input에 저장된 문자열을 합치기위한 문자열 변수 String S = ""; //while의 조건문에 있는 것이 EOF에러 해결 방법이다. //null값이 오지 않을떄만 반복한다는 반복문 while((input = br.readLine()) != null) { S += input; } //문자열에 저장된 알파벳 개수의 최댓값을 저장 할 변수 int max = 0; //최갯값을 가지는 알파벳을 저장 할 문자열 변수 String Smax = ""; //소문자 알파벳 개수만큼 반복하는 반복문을 만든다. //i가 97 부터 122까지인 것은 아스키 코드 값으로 활용하기 위함인데 //알파벳의 아스키코드 값이 97부터 122까지이다. for(char i = 97; i < 123; i++) { int count = S.length() - S.replace(String.valueOf(i), "").length(); if(max == count) { Smax += String.valueOf(i); } if(max < count) { max = count; Smax = String.valueOf(i); } } System.out.println(Smax); } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 1402번 : 아무래도이문제는A번난이도인것같다(JAVA / 자바) (0) 2022.02.19 [백준/BOJ] 1373번 : 2진수 8진수 (JAVA / 자바) (0) 2022.02.19 [백준/BOJ] 1362번 : 펫 (JAVA / 자바) (0) 2022.02.19 [백준/BOJ] 11034번 : 캥거루 세마리2 (JAVA / 자바) (0) 2022.02.18 [백준/BOJ] 11024번 : 더하기 4 (JAVA / 자바) (0) 2022.02.18