본문 바로가기

백준/JavaScript

[JS] 백준 1차원 배열 - 첫 번째 이야기

728x90

 

 

오늘은 드디어 새로운 단계를 나갈 차례이다.

 

 

문제

https://www.acmicpc.net/step/6

 

1차원 배열 단계

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

www.acmicpc.net

 

 

 

 

 

 

얼른 얼른 끝내버려야지~~~!!

1차원 배열 첫 번째 이야기~~~~ 바로 가자!

 

문제 10807번

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

 

10807번: 개수 세기

첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거

www.acmicpc.net

 

1차원 배열에 넣어서 확인해보려고 했는데... 뭔가 아닌 것 같은 기분이 들었다.

그래서 다른 분의 풀이를 참고해봤다. 다른 분들도 이 문제를 처음 풀었을 때 반복문으로 풀었는데 해결이 안돼서 filter()를 사용해서 풀었다고 한다. 여기서 filter()가 뭔지 검색해보니 filter는 배열에 사용하며, 주어진 함수를 만족하는 모든 요소를 모아 새 배열로 반환한다고 한다. 

let array = [3,5,11,0,9,'string'];
let result = array.filter((value) => value < 10)
console.log(result);

//output : array [3, 5, 0, 9]

이런 식으로 array 배열에서 10 미만의 값만 추출하기 위해 결과값들을 담아둘 result변수를 만든 후 기존 배열에 .filter()를 붙이고 괄호 안에는 필터조건이 되는 함수를 넣어주면 된다고 한다.

 

참고로 '=>'는 화살표 함수라고 한다. function 키워드를 사용해서 함수를 만드는 것보다 간단히 함수를 표현할 수 있다.

 

 

그래서 풀이를 참고하여 내가 직접 작성해봤다.

const fs = require('fs');
//백준에 제출할 때 써야하는 코드
const readFileSyncAdress = '/dev/stdin';
//테스트
//const readFileSyncAdress = 'input.txt';

const input = fs.readFileSync(readFileSyncAdress).toString().trim().split('\n');
const [N, m, v] = input;

const result = m.split(' ').filter((value) => value==v).length;

console.log(result);

 

 

'const [N, m, v] = input' 이런 식으로 작성하면 줄을 기준으로 입력받은 것들이 차례로 담긴다!!(이렇게 좋은 걸 안 쓰고 있었다니..) 그리고 m을 공백을 기준으로 나눠주고 그것 중 v랑 같은 것이 있는지 filter()로 확인한다. 마지막으로 length를 이용하여 v랑 같은 것들의 개수를 알아내면 된다.

뭔가 재밌는 것 같기도...ㅎㅎ

 

 

 

몸 상태가 안 좋아서 오늘은 한 문제만 풀어야겠다...

파이팅~~

 

 

 

 

[참고] https://velog.io/@haleyjun/JavaScript-filter-%EC%82%AC%EC%9A%A9%EB%B2%95
https://velog.io/@ki_blank/JavaScript-%ED%99%94%EC%82%B4%ED%91%9C-%ED%95%A8%EC%88%98Arrow-function
https://velog.io/@cosmos_337yje/%EB%B0%B1%EC%A4%80-10807%EB%B2%88-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%ED%92%80%EC%9D%B4

 

 

 

 

 

728x90