Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags
more
Archives
Today
Total
관리 메뉴

joyful

[Javascript] 10810번 공 넣기 - 백준코딩 본문

백준코딩

[Javascript] 10810번 공 넣기 - 백준코딩

조이풀한 개발자 2023. 7. 20. 15:52

 

문제출처 : https://www.acmicpc.net/problem/10810

 

10810번: 공 넣기

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이

www.acmicpc.net

문제


도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이 들어있지 않으며, 바구니에는 공을 1개만 넣을 수 있다.

도현이는 앞으로 M번 공을 넣으려고 한다. 도현이는 한 번 공을 넣을 때, 공을 넣을 바구니 범위를 정하고, 정한 바구니에 모두 같은 번호가 적혀있는 공을 넣는다. 만약, 바구니에 공이 이미 있는 경우에는 들어있는 공을 빼고, 새로 공을 넣는다. 공을 넣을 바구니는 연속되어 있어야 한다.

공을 어떻게 넣을지가 주어졌을 때, M번 공을 넣은 이후에 각 바구니에 어떤 공이 들어 있는지 구하는 프로그램을 작성하시오.

 

입력


첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다.

둘째 줄부터 M개의 줄에 걸쳐서 공을 넣는 방법이 주어진다. 각 방법은 세 정수 i j k로 이루어져 있으며, i번 바구니부터 j번 바구니까지에 k번 번호가 적혀져 있는 공을 넣는다는 뜻이다. 예를 들어, 2 5 6은 2번 바구니부터 5번 바구니까지에 6번 공을 넣는다는 뜻이다. (1 ≤ i ≤ j ≤ N, 1 ≤ k ≤ N)

도현이는 입력으로 주어진 순서대로 공을 넣는다.

 

출력


1번 바구니부터 N번 바구니에 들어있는 공의 번호를 공백으로 구분해 출력한다. 공이 들어있지 않은 바구니는 0을 출력한다.

 

예제 입력


5 4
1 2 3
3 4 4
1 4 1
2 2 2

 

예제 출력


1 2 1 1 0

 

풀이

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n'); 
//[ '5 4', '1 2 3', '3 4 4', '1 4 1', '2 2 2' ]

const n = Number(input[0].split(" ")[0]);  //바구니 개수 변수 저장, 숫자로 변환 5
const m = Number(input[0].split(" ")[1]);  //넣을 횟수 변수 저장, 숫자로 변환 4
//const [n, m] = input[0].split(" ").map(Number) [5, 4] 배열 형식의 변수로도 저장 가능

let basket = new Array(n).fill(0);
//배열을 만들어서 0으로 채워둔다. 
//new 연산자 + Array 생성자 함수 + fill(0) 내장함수 사용
//'n개의 element가 존재하는 Array를 만들고, 각 element에는 0이 담겨있다.'

 for(let i = 1; i <= m; i ++) { //공을 m번까지 넣는다. 0이 아닌 1번 인덱스부터 시작, 4번 반복!
    const a = input[i].split(" ").map(Number)
    //input 배열을 공백으로 구분해서 숫자로 변환  [ 1, 2, 3 ] [ 3, 4, 4 ] [ 1, 4, 1 ]  
    const start = a[0];//i번 바구니
    const end = a[1];//j번 바구니
    const ballNum = a[2];//K번 번호
    //const [i, j, k] = input[i].split(" ").map(Number)/ [1, 2, 3] 배열 형식의 변수로도 저장 가능

    for(let j = start - 1; j < end; j++) {
    //바구니의 index부터 시작해야 하니까 -1 빼준다. (index는 항상 0부터 시작)
      basket[j] = ballNum;  // 바구니 배열에 특정 번호의 공을 넣는다.
    }     
 }
 console.log(basket.join(" "));

 


TIL

new 연산자생성자 함수

 

  • 유사한 객체를 여러 개를 만들어야 할 때 new 연산자와 생성자 함수를 사용하면 쉽게 만들 수 있다.
  • 생성자 함수는 객체를 만드는 역할을 하는 함수이다.
  • 생성자 함수는 일반 함수와 크게 다른 점은 없지만 아래 두 가지를 반드시 지켜야 한다.
  1. 함수 이름의 첫 글자는 대문자로 시작한다.
  2. 함수 호출 시 반드시 'new' 연산자를 붙여 실행한다. 

 

 

fill()

 

  • fill()은 배열 메서드로서, 원하는 값을 배열의 특정 요소 자리에 채우고 싶을 때 사용한다.
  • 기본형식은 배열에 채우고 싶은 값과, 시작과 끝 인덱스를 넣으면 된다. (이 때 끝 인덱스 '전'까지 채워진다)
배열명.fill(value, startIndex, endIndex) //3개의 매개변수

 

예제:

 

const Array = ['a', 'b', 'c', 'd']
console.log(Array.fill('z', '1', '3'));
//['a', 'z', 'z', 'd']

 

 

 

join() 메서드

 

  • join() 메서드는 배열의 모든 요소를 연결해 하나의 문자열로 만들어준다. 
  • seperator는 매개변수로, 배열의 각 요소를 구분할 문자열이다.
배열명.join([seperator]) //1개의 매개변수

 

예제:

 

const elements = ['Fire', 'Air', 'Water'];
console.log(elements.join()); //구분자 없을 때는 쉼표로 표기되어 연결
// Expected output: "Fire,Air,Water"

console.log(elements.join('')); //문자별 연결
// Expected output: "FireAirWater"

console.log(elements.join('-')); //- 기호별 연결
// Expected output: "Fire-Air-Water"