10809 자바
숫자의합
public class Q10809 {
public static void main(String args[])throws IOException {
int[] alpha = new int[26];
Arrays.fill(alpha, -1);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String txt = br.readLine();
for(int i=0; i < txt.length(); i++ )
{
int index = txt.charAt(i) - 'a';
if(alpha[index]!=-1) continue;
else{
alpha[index] = i;
}
}
for(int x : alpha){
System.out.print(x+" ");
}
}
}
단순히 알파벳을 a부터 z까지를 위해 0~26이라는 공간을 만든 그 횟수를 값으로 넣고 출력하면 되는 문제이다.
각 알파벳의 등장 횟수를 기록하기 위한 배열을 생성하고 , Arrays.fill 함수를 이용해서 -1로 값들을 초기화해준다.
그 후 등장하는 알파벳마다 'a'를 빼주면서 등장횟수를 기록하는 배열에 값을 하나씩 늘려주면 쉽게 해결 가능하다.
2675 자바
문자열 반복
- BufferReader + StringTokenizer
for문을 돌리면서 문자 하나에 대해서 N번씩 출력하므로 출력횟수가 많아진다.
이런 경우에는 StringBulider를 통해서 출력할 양식을 스트림 형식으로 저장한 뒤 한번에 출력하면
출력 주문 횟수를 줄일 수 있다. 이 방법은 밑에서 진행하겠다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Q2675 {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int testCaseCnt = Integer.parseInt(br.readLine());
for(int i=0; i<testCaseCnt; i++){
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int reply = Integer.parseInt(st.nextToken(" "));
String str = st.nextToken(" ");
for(int j=0; j<str.length(); j++){
for(int k=0; k<reply; k++) {
System.out.print(str.charAt(j));
}
}
System.out.println();
}
}
}
- BufferReader + StringBuilder
위에서 설명한대로 문자열의 char 단위로 쪼개는 것이 아니라 한번에 String stream으로 저장한뒤
마지막 단에서 출력하는 방식이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Q2675_1 {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int testCaseCnt = Integer.parseInt(br.readLine());
for(int i=0; i < testCaseCnt; i++){
String[] str = br.readLine().split(" ");
int reply = Integer.parseInt(str[0]);
for (byte c : str[1].getBytes()) { // 문자열
for(int j=0; j<reply; j++){
sb.append((char)c);
}
}
sb.append('\n');
}
System.out.println(sb);
}
}
1157 자바
단어 공부
import java.io.IOException;
import java.util.HashMap;
import java.util.Scanner;
public class Q1157 {
public static void main(String args[]) throws IOException {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
HashMap<String, Integer> word_cnt = new HashMap<>();
int[] alphabet = new int[26];
int max=0;
int freq_c=0;
boolean duplicate = false;
for(int i=0; i<str.length(); i++) {
int t = str.charAt(i)-65;
if(t>25) t -= 26+6;
alphabet[t]++;
if(alphabet[t]==max) {
duplicate = true;
}
else if(alphabet[t] > max){
max = alphabet[t];
freq_c = t+65;
duplicate = false;
}
}
if(duplicate) System.out.println("?");
else {
char ans = (char)freq_c;
System.out.println(ans);
}
}
}
이 코드를 위해서 아스키 코드의 진행 형식을 한번 짚고 넘어가야할 피요가 있다.
문자의 시작은 대문자 순서로 시작되고 이를 나타내는 10진 수의 값은 65이다.
따라서 Z의 값은 90이다.
이 때 헷갈린 것이 그 뒤로 바로 소문자가 오는 것 같지만, 6개의 문자가 위치하고 있고 그 뒤로 소문자가 등장한다.
따라서 소문자의 시작 값은 97로 a는 97을 가리킨다.
따라서 z의 값은 122이다.
추가로
Integer를 String으로 변경하는 방법
>> str = Integer.toString(integer)
>> str = String.ValueOf(integer)
>> str = integer - "";
String을 Integer로 변경하는 방법
>> Integer.parseInt(str)
>> int integer = Integer.valueOf(str)
integer형식을 char형식으로 변경하는 방법
>> char a = (char) integer
'Code > baekjoon [ 단계별 ]' 카테고리의 다른 글
백준 단계별 <문자열2 > (0) | 2022.02.28 |
---|---|
백준 단계별 (0) | 2022.02.21 |
백준 단계별 문제 <함수> (0) | 2022.02.20 |
백준 단계별 문제 <배열> (0) | 2022.02.19 |
백준 단계별 문제 <1차원 배열> (0) | 2022.02.16 |