본문 바로가기
Code/baekjoon [ 단계별 ]

백준 단계별 <문자열>

by jaeaemin 2022. 2. 25.

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