[백준 JAVA] 1157번 풀이 - 단어 공부
by mini_min
package baekjoon; import java.util.Scanner; /** * 단어 공부 * 알파벳 대소문자가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 * 알아내는 프로그램을 작성한다. * 대소문자는 구분하지 않는다! * 1. 첫줄에 단어가 입력된다. * 2. 가장 많이 사용된 알파벳을 대문자로 출력한다. * 만약, 가장 많이 사용된 알파벳이 여러 개 존재하면 ?를 출력한다. * */ public class _1157 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.next(); s = s.toUpperCase(); int [] arr = new int[s.length()]; int [] count = new int[26]; for ( int i = 0; i < s.length(); i++ ) { arr[i] = (char) (s.charAt(i)-65); } for ( int i = 0; i < arr.length; i++ ) { count[arr[i]]++; } int max = -1; boolean same = false; int num = 0; for ( int i = 0; i < count.length; i++ ) { //System.out.println((char)(i+65) + "개수 " + count[i]); if ( count[i] > max ) { max = count[i]; num = i; same = false; } else if ( max > 0 && max == count[i] ) { same = true; } } if ( same ) { System.out.println("?"); } else { System.out.println((char)(num+65)); } sc.close(); } }
풀이 방법
"아스키 코드" 라는 점을 활용해 알파벳의 count 개수를 세는 배열을 만들면 되겠다고 생각했다.
그래서 알파벳에 -65 한 값을 배열에 저장해서 count[arr[i]] 배열을 만들었고 개수를 저장했다.
그 이후에는 큰 값을 비교했고, 만약 max 가 1개 이상 + 그런데 max 값과 비교하는 값이 같은 경우가 있다면 same 을 true 로 변경했다. for 문이 끝날 때 까지 same = true 일 경우를 처리했다.
블로그의 정보
개발자 미니민의 개발로그
mini_min