
이 포스팅은 자바 8버전으로 풀이가 됐습니다.
문제 출처
https://www.acmicpc.net/problem/1157
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
// 문자열 비교 1157번
public class Main {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String text = br.readLine().toUpperCase();
char Qt = '?';
int max = 0;
int data[] = new int[26];
for(int i=0;i<text.length();i++) {
data[(int)text.charAt(i) - 'A']++;
}
for(int j=0;j<data.length;j++) {
if(max < data[j]) {
max = data[j];
Qt = (char)(j + 'A');
}
else if(max == data[j]) {
Qt ='?';
}
}
System.out.println(Qt);
}catch(IOException e) {
System.out.println(e.toString());
}
}
}
|
cs |
풀이
가장 많이 나온 단어의 소문자는 대문자로 대문자는 대문자 그대로 출력하는 문제이다.
문제 해결을 위해서는 문자가 아닌 문자열을 입력받고 문자열에 존재하는 문자들의 개수를 확인하는 것이 중요하다.
11번 라인에서 문자열 값을 받는다.
이때 문자는 대문자만 출력하므로 소문자로 입력된 값도 모두 대문자로 만들어주는 toUpperCase() 메소드를 사용한다.
12번 라인에서 가장 많이 출력될 변수 char 변수를 선언한다.
13번 라인에서는 어떤 문자가 많이 반복됐는지 확인을 위한 정수형 변수를 선언한다.
이 문제는 대문자만 포함하기 때문에 아래의 아스키코드를 참조하여 작성을 진행해야 한다.
https://ko.wikipedia.org/wiki/ASCII
ASCII - 위키백과, 우리 모두의 백과사전
ko.wikipedia.org
대/소문자를 모두 카운팅 해야 한다면 더 많은 메모리 공간이 필요하지만 대문자 한정으로 코드를 카운팅 하기 때문에 16번 라인에서는 0~25까지의 배열을 선언하여 사용할 것이므로 총 26개의 정수 배열을 선언한다.
18번 라인 첫 번째 반복문에서는 text의 길이만큼 반복한다.
19번 라인에 data[배열]에서는 charAt(i번째) 메소드를 활용하여 text 변수에 저장된 문자열을 하나의 문자로 만들어 준다.
이때 앞에 (int) 형으로 형 변환을 지정하면 아스키코드 표에 의하여 문자 값은 숫자 정수형 값으로 변경되면서 들어간다. 앞서 text 문자열에서 toUpperCase() 메소드를 활용하여 모든 문자를 대문자로 입력받았기 때문에 배열에 저장할 때는 -'A'를 작성하여 A 문자가 갖는 숫자만큼 제외하고 보낸다. 이유는 최댓값을 비교할 때 사용될 값이기 때문이다.
가장 많이 반복된 값을 확인하는 max 변수가 data[번호]보다 작은 경우 max의 값에 최댓값을 data[번호]로 갱신한다.
이후 Qt에는 j + 이전에 제외했던 대문자 A값을 추가로 저장한다. 이렇게 변수 값을 변경하는 곳에 (char)를 기재해서 문자로 바꾸면 아스키코드 표의 숫자 값과 동일한 문자로 변경해 준다.
만약 모든 값들을 비교했는데 그대로라면 char 변수에는 ?를 저장하고 종료하면 된다.
짧은 포스팅 읽어주셔서 감사드립니다.
오타나 문제가 있는 경우 댓글 부탁드리겠습니다.
다음 포스팅 때 뵙겠습니다.
'백준 - Java' 카테고리의 다른 글
[백준 - 1181][Java] 단어 정렬 (0) | 2022.08.01 |
---|---|
[백준 - 2908][Java] 상수 (0) | 2022.07.31 |
[백준 - 2750][Java]수 정렬하기 (0) | 2022.06.20 |
[백준 - 1789][Java] 수들의 합 (0) | 2022.06.15 |
[백준 - 2163][Java] 초콜릿 자르기 (0) | 2022.06.14 |

이 포스팅은 자바 8버전으로 풀이가 됐습니다.
문제 출처
https://www.acmicpc.net/problem/1157
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
// 문자열 비교 1157번
public class Main {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String text = br.readLine().toUpperCase();
char Qt = '?';
int max = 0;
int data[] = new int[26];
for(int i=0;i<text.length();i++) {
data[(int)text.charAt(i) - 'A']++;
}
for(int j=0;j<data.length;j++) {
if(max < data[j]) {
max = data[j];
Qt = (char)(j + 'A');
}
else if(max == data[j]) {
Qt ='?';
}
}
System.out.println(Qt);
}catch(IOException e) {
System.out.println(e.toString());
}
}
}
|
cs |
풀이
가장 많이 나온 단어의 소문자는 대문자로 대문자는 대문자 그대로 출력하는 문제이다.
문제 해결을 위해서는 문자가 아닌 문자열을 입력받고 문자열에 존재하는 문자들의 개수를 확인하는 것이 중요하다.
11번 라인에서 문자열 값을 받는다.
이때 문자는 대문자만 출력하므로 소문자로 입력된 값도 모두 대문자로 만들어주는 toUpperCase() 메소드를 사용한다.
12번 라인에서 가장 많이 출력될 변수 char 변수를 선언한다.
13번 라인에서는 어떤 문자가 많이 반복됐는지 확인을 위한 정수형 변수를 선언한다.
이 문제는 대문자만 포함하기 때문에 아래의 아스키코드를 참조하여 작성을 진행해야 한다.
https://ko.wikipedia.org/wiki/ASCII
ASCII - 위키백과, 우리 모두의 백과사전
ko.wikipedia.org
대/소문자를 모두 카운팅 해야 한다면 더 많은 메모리 공간이 필요하지만 대문자 한정으로 코드를 카운팅 하기 때문에 16번 라인에서는 0~25까지의 배열을 선언하여 사용할 것이므로 총 26개의 정수 배열을 선언한다.
18번 라인 첫 번째 반복문에서는 text의 길이만큼 반복한다.
19번 라인에 data[배열]에서는 charAt(i번째) 메소드를 활용하여 text 변수에 저장된 문자열을 하나의 문자로 만들어 준다.
이때 앞에 (int) 형으로 형 변환을 지정하면 아스키코드 표에 의하여 문자 값은 숫자 정수형 값으로 변경되면서 들어간다. 앞서 text 문자열에서 toUpperCase() 메소드를 활용하여 모든 문자를 대문자로 입력받았기 때문에 배열에 저장할 때는 -'A'를 작성하여 A 문자가 갖는 숫자만큼 제외하고 보낸다. 이유는 최댓값을 비교할 때 사용될 값이기 때문이다.
가장 많이 반복된 값을 확인하는 max 변수가 data[번호]보다 작은 경우 max의 값에 최댓값을 data[번호]로 갱신한다.
이후 Qt에는 j + 이전에 제외했던 대문자 A값을 추가로 저장한다. 이렇게 변수 값을 변경하는 곳에 (char)를 기재해서 문자로 바꾸면 아스키코드 표의 숫자 값과 동일한 문자로 변경해 준다.
만약 모든 값들을 비교했는데 그대로라면 char 변수에는 ?를 저장하고 종료하면 된다.
짧은 포스팅 읽어주셔서 감사드립니다.
오타나 문제가 있는 경우 댓글 부탁드리겠습니다.
다음 포스팅 때 뵙겠습니다.
'백준 - Java' 카테고리의 다른 글
[백준 - 1181][Java] 단어 정렬 (0) | 2022.08.01 |
---|---|
[백준 - 2908][Java] 상수 (0) | 2022.07.31 |
[백준 - 2750][Java]수 정렬하기 (0) | 2022.06.20 |
[백준 - 1789][Java] 수들의 합 (0) | 2022.06.15 |
[백준 - 2163][Java] 초콜릿 자르기 (0) | 2022.06.14 |