-
[1157] 단어 공부자바/백준 2023. 7. 20. 22:39
[Java]
문제 링크: https://www.acmicpc.net/problem/1157
입력된 단어에서 가장많이 입력된 알파벳을 대문자로 출력하는 문제로 처음에는 set을 활용해 알파벳별 count를 확인할라 했으나 런타임오류로 해당 풀이는 포기했습니다. 풀이1_런타임오류 설명 후 성공한 풀이2를 기재하였으니 참고 부탁 드립니다.
[풀이1_런타임오류]
import java.util.Scanner; import java.util.Set; import java.util.ArrayList; import java.util.HashSet; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int max = 0; int cnt = 0; char chr=' '; String str = sc.next(); Set<String> strSet = new HashSet<String>(); for(int i=0; i<str.length(); i++) { strSet.add(String.valueOf(Character.toUpperCase(str.charAt(i)))); } ArrayList<String> strList = new ArrayList<String>(strSet); int[] iArr = new int[strList.size()]; for(int i = 0; i<str.length(); i++) { for(int j = 0; j<strList.size(); j++) { if(String.valueOf(Character.toUpperCase(str.charAt(i))).equals(strList.get(j))) { iArr[j]++; if(max<iArr[j]) { max=iArr[j]; chr=strList.get(j).charAt(0); } } } } for(int i = 0; i<strList.size();i++) { if(max==iArr[i]) cnt++; } if(cnt>1) System.out.println("?"); else System.out.println(chr); } }
- set을 사용하여 입력된 단어를 중복없는 알파벳(Character.toUpperCase를 통해 대문자로 변환)으로 표현
- 중복 제거된 set을 ArrayList 형태로 변환(이때부터 앞으로의 비효율적인 코드가 그려져서 멈출까 고민했습니다..)
- ArrayList size 만큼의 int[] 배열을 생성
- 이중 for문을 이용하여 입력된 문자 한 글자마다 ArrayList에 몇 번째 알파벳과 일치하는지 확인 후, int[]에 1씩 더했습니다.(왕비효율적) - 이 부분에서 런타임오류가 발생했을 거라 생각해 이후 설명은 생략하겠습니다.
[풀이2]
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next(); int[] num = new int[26]; for(int i = 0; i<str.length(); i++) { num[Character.toUpperCase(str.charAt(i))-'A']++; } int max=0; int maxIndex=0; int cnt=0; for(int i=0; i<num.length; i++) { if(max<num[i]) { max=num[i]; maxIndex=i; cnt=0; } if(String.valueOf(num[i]).equals(String.valueOf(num[maxIndex])) && max!=0) { cnt++; } } if(cnt>1) { System.out.println("?"); } else System.out.println((char) (maxIndex+'A')); } }
혹시 궁금하신 점 있으신 경우 편하게 말씀 부탁 드립니다.
'자바 > 백준' 카테고리의 다른 글
[1158] 요세푸스 문제 (0) 2023.08.03 [10828] 스택 (0) 2023.07.22 [1834] 나머지와 몫이 같은 수 (0) 2023.07.19 [1568] 새 (2) 2023.07.17 [1568] 공 (0) 2023.07.17