코딩테스트/자바 문제풀이

[새싹: 문자열 (1)] 백준 11654, 2743, 2744

승요나라 2024. 7. 7. 22:34

11654번: 아스키 코드

https://www.acmicpc.net/problem/11654

 

# 코드

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        // 빠른 입출력을 위한 BufferedReader 와 BufferedWriter
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        // String 형      ->   char 형     ->  int 형  ->  String 형
        // br.readLine()  ->  .charAt(0)  ->  (int)   ->  String.valueOf()
        bw.write(String.valueOf((int) br.readLine().charAt(0)));

        // Reader 버퍼 닫기
        br.close();

        // Writer 버퍼 비운 뒤 닫기
        bw.flush();
        bw.close();
    }
}
  • 처음 코드는 연습했던 대로 시간 단축을 위해 BufferedReader 와 BufferedWriter 를 사용하여 작성했다.  
  • 그러나 String 형으로 입출력이 이루어지는 Buffered 에서 입력 값을 ASCII 코드로 변환하기 위해서는 String → char   int  String 의 과정을 거치게 되어서 더 효율적인 코드가 있을 것 같았다.

 

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        // byte 값으로 문자 한 개만 읽으며 대응되는 아스키코드 값을 저장하는 System.in 사용
        int text = System.in.read();
        System.out.println(text);
    }
}
  • 위는 구글링을 통해 알게 된 깔롱한 코드이다.
  • 가장 기초 입력방법인 System.in 은 문자 한 개만 읽으며 대응되는 아스키코드 값을 저장할 수 있다.
  • 코드는 이 블로그를 참고하였다 :D
 

[백준] 11654번 : 아스키 코드 - JAVA [자바]

https://www.acmicpc.net/problem/11654 11654번: 아스키 코드 알파벳 소문자, 대문자, 숫자 0-9중 하나가 주어졌을 때, 주어진 글자의 아스키 코드값을 출력하는 프로그램을 작성하시오. www.acmicpc.net 문제 매

st-lab.tistory.com

 

 


2743번: 단어 길이 재기

https://www.acmicpc.net/problem/2743

 

# 코드

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        // 빠른 입출력을 위한 BufferedReader 와 BufferedWriter
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        // 문자열의 길이 출력
        bw.write(String.valueOf(br.readLine().length()));

        // Reader 버퍼 닫기
        br.close();

        // Writer 버퍼 비운 뒤 닫기
        bw.flush();
        bw.close();
    }
}
  • BufferedWriter 는 숫자를 아스키코드에 따른 문자로 출력하기 때문에 String.valueOf() 를 이용해 길이 값을 String 형으로 변환해 주었다.

 


2744번: 대소문자 바꾸기

https://www.acmicpc.net/problem/2744

 

# 코드

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        // 빠른 입출력을 위한 BufferedReader 와 BufferedWriter
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        // 입력으로 주어진 단어
        String word = br.readLine();

        for (int i = 0; i < word.length(); i++) {
            // 단어의 각 글자의 아스키 코드 값
            int ascii = (int) word.substring(i, i + 1).charAt(0);

            if (ascii >= 65 && ascii <= 90) {
                // 대문자 -> 소문자
                bw.write(word.substring(i, i + 1).toLowerCase());
            } else if (ascii >= 97 && ascii <= 122) {
                // 소문자 -> 대문자
                bw.write(word.substring(i, i + 1).toUpperCase());
            }
        }

        // Reader 버퍼 닫기
        br.close();

        // Writer 버퍼 비운 뒤 닫기
        bw.flush();
        bw.close();
    }
}
  • BufferedReader 가 br.readLine() 을 딱 한 번만 이용하여 딱 한 줄만 읽어올 수 있도록 word 변수에 담아 사용했다.
  • 변수를 사용하지 않고 br.readLine() 을 중복으로 작성하면 버퍼가 다음 입력줄을 기다리기 때문에 나도 버퍼도 민망해질 수 있다. (실행결과 기다리면서 로딩창만 쳐다본 사람)