<BOJ 2798> 블랙잭

pastafromvictoriadesert·2024년 2월 2일
0

BOJ

목록 보기
11/12

백준 2798번 바로가기


📌자바

언어를 바꾸는데 문제가 많다.

이번에는 입력에서 문제가 생겼는데, 지난 번 공부했던 BufferReader를 사용할 때 문제가 발생했다.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Scanner sc = new Scanner(System.in);

이렇게 첫 줄 두 정수는 스캐너를 이용하고, 밑에 줄에 여러 정수를 입력 받을 때(최대 100개의 정수)는 버퍼 리더를 사용하려고 했었다.

하지만 스캐너에서 버퍼로 넘어가버린 줄바꿈문자 \n이 버퍼에 입력되어 버려서 에러를 출력하는 문제가 발생했다.

버퍼에 익숙해졌다고 생각했는데, 버퍼와 스캐너를 동시에 사용하는 것은 문제가 있어서 버퍼만 사용해서 이 문제를 풀기로 했다.

import java.util.StringTokenizer;

StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());

문제는 버퍼를 입력 받을 때, 정수라면 parseInt를 이용해서 정수로 변환해줘야하는데 변수 하나에 입력받는 변수 하나를 입력해줘야 하기 때문에 Split을 해줘야 했다.

이를 위한 라이브러리는 StringTokenizer 인데, 말 그대로 String을 토큰화 한다는 뜻이다.

" "을 기준으로 각 문자열을 토큰화해서 parseInt가 가능하게 해주는 라이브러리이다.

이것도 파이썬으로 하면 매우 편하게 가능하다.

n, m = map(int, input().split())

문제는 여기서 끝이 아니었다.

바로 버퍼로 입력받은 수들을 배열에 저장해야 했다는 것

import java.util.stream.Collectors;
import java.util.Arrays;

List<Integer> numbers = Arrays.stream(br.readLine().split(" "))
                .map(c -> Integer.valueOf(c))
                .collect(Collectors.toList());

진짜 어렵다... 심지어 배열이 아니라 List에 저장되기 때문에, Value를 조회하려면 numbers.get(i)로 조회를 해야했다.

이제 슬슬 자바의 문법들이 익숙해지나 싶었는데, 한발짝 멀어진 느낌이다.


📌2798번 블랙잭

완전탐색하는 쉬운 문제이기 때문에, 역시 자바의 문법만 해결된다면 쉽게 풀 수 있는 문제였다.

코드전문

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;
import java.util.stream.Collectors;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int answer = 0;

        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        List<Integer> numbers = Arrays.stream(br.readLine().split(" "))
                .map(c -> Integer.valueOf(c))
                .collect(Collectors.toList());

        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                for (int k = j + 1 ; k < n; k++) {
                    int temp = numbers.get(i) + numbers.get(j) + numbers.get(k);
                    if (temp <= m && temp > answer) {
                        answer = temp;
                    }
                }
            }
        }

        System.out.println(answer);
    }
}

0개의 댓글

관련 채용 정보