hoon's bLog

백준 Java & Javascript 1차원 배열 2562, 10810 본문

코딩테스트/백준

백준 Java & Javascript 1차원 배열 2562, 10810

개발한기발자 2023. 7. 26. 09:20
반응형

문제출처 : https://www.acmicpc.net/step/6

 

1차원 배열 단계

배열을 활용하여 서로 다른 값의 개수를 찾는 문제

www.acmicpc.net


저번 포스팅에 이어서 1차원 배열!

아직까지 여전히 무난하지만, Java와 Javascript를 같이 풀다 보니,

조금 번잡하고 길어짐과 동시에, 퀄리티가 조금 떨어지는 듯함을 느꼈기 때문에,

포스팅 문제수를 줄여보기로 했다 ㅎㅎㅎ(절대 분량 뽑기 아님)

난이도는 ★~★.5!

총 2562, 10810 문제 가보자고~!!!

[2562] 최댓값

<문제>

<Java 풀이>

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) throws NumberFormatException, IOException{

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

        // 입력받은 값을 담을 list
        ArrayList<Integer> list = new ArrayList<Integer>();

        for (int i = 0; i < 9; i++) {
            // 입력받은 값을 list에 순서대로 저장
            list.add(Integer.parseInt(br.readLine()));
        }
        // max값 초기화
        int max = list.get(0);

        for (int j = 1; j < list.size(); j++) {
            if(list.get(j) > max) // 입력받은 list에 max값 보다 큰 값이 있으면 저장
                max = list.get(j);
        }

        System.out.println(max);
        System.out.println(list.indexOf(max) + 1); // max 값이 존재하는 list의 인덱스 + 1 = max의 순번
        
        br.close();

    }
}

<Javascript 풀이>

const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').map(n => parseInt(n));

let maxValue = input[0];
let maxNo = 0;

for (let i = 0; i < input.length; i++) {
    
    if (maxValue < input[i]) {
        maxValue = input[i];
        maxNo = i;
    }
}

console.log(maxValue + "\n" + (maxNo+1));

[10810] 공 넣기

<문제>

<Java 풀이>

public class Main {
    public static void main(String[] args) throws IOException{

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        // StringTokenizer로 N과 M, " "(공백)으로 구분(default 구분자가 " "(공백))
        StringTokenizer st = new StringTokenizer(br.readLine());
        // N : 바구니 개수
        int N = Integer.parseInt(st.nextToken());
        // M : 공 넣는 방법의 수
        int M = Integer.parseInt(st.nextToken());

        // 공을 담을 바구니 배열
        int[] basket = new int[N];

        for(int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine()); //startBasket, endBasket, ballNo
            
            // startBasket : 공을 넣을 시작 바구니
            // endBasket   : 공을 넣을 끝 바구니
            // ballNo      : 넣을 공의 숫자
            int startBasket = Integer.parseInt(st.nextToken());
            int endBasket = Integer.parseInt(st.nextToken());
            int ballNo = Integer.parseInt(st.nextToken());
            
            // 순번을 인덱스로 맞춰주기 위해 -1, 끝 바구니까지 반복 설정
            for(int j = startBasket - 1; j < endBasket; j++) {
                basket[j] = ballNo;
            }
        }
        
        for(int k = 0; k < basket.length; k++) {
            // 해당 바구니의 공 번호 출력
            bw.write(basket[k] + " ");
        }
        br.close();
        bw.flush();
        bw.close();
    }

}

<Javascript 풀이>

const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const [n, m] = input[0].trim().split(' ').map(x => parseInt(x));
const ball = [];

for (let i=0; i < n; i++) {
    ball.push(0);
}

for (let i=0; i < m; i++) {
    const [st, ed, num] = input[i+1].trim().split(' ').map(x => parseInt(x));
    
    for (let j = st - 1; j < ed; j++) {
        ball[j] = num;
    }
}

Java와 Javascript를 같이 풀어본 결과,

그냥 문법의 차이만 조금 있고, 문제의 로직은 비슷하다고 볼 수 있다.

단, Java로 풀이 시, 예제처럼 직접 입력을 받기 때문에, 입력에 따라 추가로 입력받는 로직을 구현하는 부분이 필요하고,

Javascript는 readFileSync안에 '파일'을 가공하여 상수로 잘 이용해야 한다.

 

추가로 Java로 풀이할 경우,

 

BufferedReader 사용 시, Garbage Collector에 의하여 사용되지 않는 자원이 정리되기 전에,

연속/반복적으로 BufferedReader가 close 되지 않고 사용되면 정상적으로 reading이 되지 않는 경우가 발생할 수 있다.
BufferedWriter의 close()를 명시한 이유는, 자원 관리의 중요성이 그 이유이다.

Java에서는 자원관리를 쉽게 해주는 Garbage Collector가 있기 때문에 큰 문제가 되지 않지만,
자원관리를 프로그래머가 직접 해야 하는 경우가 많기 때문에, 자원관리를 해주는 습관을 들이는 것이 좋다.

 

Java 자세한 사항은 백준 문제 풀이 시 주의 해야할 점 포스팅을 참고하면 되겠다.

 

만약 여기서 막히고 어렵다면?!!?!?

아래 링크에서 배열에 대해서 다시 알아보고 오시면 좋을 듯!

언제나 새로운 정보 공유와 잘못된 정보

지적/태클은 환영입니다!

끝.

Reference

Java : https://psip31.tistory.com/11

 

[Java] 배열(Array)

안녕하세요! 이번 포스팅에서는 "배열"! 배열에 대해서 한번 알아보도록 하겠습니다. ​ 배열(Array)이란? 배열(Array) : 같은 타입의 여러 변수를 연속된 메모리 공간으로 이루어진 자료구조 여기서

psip31.tistory.com

Javascript : https://psip31.tistory.com/129

 

[Javascript] 배열(Array)

배열(array) 이름과 인덱스로 참조되는 정렬된 값의 집합 배열을 구성하는 각각의 값을 배열 요소(element), 배열에서의 위치를 가리키는 숫자를 인덱스(index) 배열 요소의 타입이 고정되어 있지 않

psip31.tistory.com

 

728x90
반응형