hoon DevLog

백준 Java & Javascript 1차원 배열 10807, 10871, 10818 본문

코딩테스트/백준

백준 Java & Javascript 1차원 배열 10807, 10871, 10818

개발한기발자 2023. 7. 19. 11:02
반응형

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

 

1차원 배열 단계

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

www.acmicpc.net


이번 포스팅은 1차원 배열!

아는 동생들과 스터디를 하면서 문제를 풂과 동시에 포스팅을 하면 좋겠다라는 생각이 들었다.

주 3 문제씩 풀면서 본인이 푼 방식을 설명하고 피드백을 해주는 형태인데 꽤나 도움이 되는 것 같다!

난이도는 ★~★.5!

총 10807, 10871, 10818 3문제 Get it!!!

[10807] 개수 세기

<문제>

<Java 풀이>

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] arr = new int[n];

        StringTokenizer st = new StringTokenizer(br.readLine());

        int num = Integer.parseInt(br.readLine());
        int cnt = 0;

        for(int i=0; i < arr.length; i++){
            arr[i] = Integer.parseInt(st.nextToken());
            if(arr[i] == num){
                cnt++;
            }
        }

        System.out.println(cnt);
        br.close();

    }
}

<Javascript 풀이>

const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
let arr = input[1].split(' ');

var cnt = 0;
for(var i=0; i < +input[0]; i++){
    // 셋째줄에 입력된 수가 있으면 cnt +1
    if(input[2] == +arr[i]) cnt++;
}

console.log(cnt);

[10807] X보다 작은 수

<문제>

<Java 풀이>

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int N = Integer.parseInt(st.nextToken());
        int X = Integer.parseInt(st.nextToken());

        StringBuilder sb = new StringBuilder();

        st = new StringTokenizer(br.readLine(), " ");

        for (int i = 0; i < N; i++) {
            int value = Integer.parseInt(st.nextToken());

            if (value < X)
                sb.append(value).append(' ');
        }
        System.out.println(sb);
    }
}

<Javascript 풀이>

const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
let num = input[0].split(' '); // 첫째줄
let arr = input[1].split(' '); // 둘째줄
let str = '';				   // 결과 출력할 변수

for(var i=0; i < +num[0]; i++){
    // 둘째줄의 수가 첫째줄에 주어진 X보다 작은 수를 공백과 함께 str에 저장
    if(+num[1] > +arr[i])
        str += arr[i] + ' ';
}
console.log(str.trim());

[10807] 최소, 최대

<문제>

<Java 풀이>

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

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

        Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine()," ");

        int max = -1000001;
        int min = 1000001;

        while(st.hasMoreTokens()) {
            int val = Integer.parseInt(st.nextToken());
            if(val>max) max = val;
            if(val<min) min = val;
        }
        System.out.println(min + " " + max);
    }
}

<Javascript 풀이>

const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
for (let i = 0; i < N; i++) {
  arr[i] = Number(arr[i]);
}

// max, min 초기화
let max = arr[0];
let min = arr[0];

for (let i = 0; i < N; i++) {
  // 큰 값은 max, 작은 값은 min에 저장
  if (max < arr[i]) max = arr[i];
  if (min > arr[i]) min = arr[i];
}
// 백틱을 이용한 결과 출력 
console.log(`${min} ${max}`);

<다른 풀이(제출 시 시간은 좀 걸림..)>

let input = require('fs').readFileSync('/dev/stdin').toString().split('\n');

// 주어진 정수 N개
let count = Number(input[0]);

// 배열로 받은 값을 map 메서드를 이용해 Number로 치환
let numbers = input[1].split(' ').map(x=> Number(x));

/*
 * a, b 두 요소를 전달하고, a - b로 크기를 비교해서 양수인지, 음수인지, 0인지 판별
 * a가 b보다 크면 양수로 return, 같으면 0, a가 b보다 작으면 음수로 return.
 * a가 작으면 a를 앞으로 보내고, 0을 반환하면 그대로 있고, a가 크면, b가 작은 거니까 b를 앞으로 보내서 최종적으로 오름차순 됨.(내림차순은 그 반대)
 */
numbers.sort((a, b) => a - b);

/*
 * sort 메서드로 내림차순 정렬을 하면 numbers 배열에서 index 0번째가 최솟값이 되고
 * numbers 배열에서 첫 번째 줄에 주어진 정수 N - 1(마지막 인덱스) 은 최댓값이 됨!
 */ 
console.log(`${numbers[0]} ${numbers[count - 1]}`);

역시 크게 따로 설명할 필요 없을만큼 어려운 부분은 없다.

Java로 풀이할 경우 백준 문제 풀이 시 주의 해야할 점 포스팅을 참고하면 되겠다.

Javascript는 입력을 따로 받지 않아서 푸는데 좀더 수월 했던것 같다.

 

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

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

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
반응형