https://www.acmicpc.net/problem/2750
2750번: 수 정렬하기
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
www.acmicpc.net
java 풀이
package march10;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
public class 수정렬하기 {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N];
for(int i =0; i<N; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(arr);
StringBuilder sb = new StringBuilder();
for (int a : arr) {
sb.append(a).append("\n");
}
System.out.println("결과는");
System.out.println(sb.toString());
}
}

왜 InputStreamReader 로 읽은다음에 BufferedReader로 다시 읽는걸까?
속도향상을 위해서!
InputStreamReader는 Char 하나씩 읽어온다. 아니면 바이트를 설정해서 바이트 만큼 읽어오든가..
BufferedReader를 사용하면 메모리 버퍼에 데이터를 쌓은 다음 파일에 집어넣는다고 한다.
또한 한글자씩 읽지 않고, 한 라인씩 읽을 수 있는 함수가 있다. String data = readLine(); // !=null


https://www.youtube.com/watch?v=4zvFUslxIJM&list=PLR9w0n2BH7rcWz1XUOeAm0S7tdUC3dbD-&index=8
https://www.youtube.com/watch?v=iQnasq0QkuI&list=PLR9w0n2BH7rcWz1XUOeAm0S7tdUC3dbD-&index=20
nodeJS 풀이
const fs = require('fs');
const input = fs.readFileSync('/dev/dtdin').toString().trim().split('\n').map(num => parseInt(num));
let N = input.shift();
let sorted = input.sort((a, b => a - b));
// for (let i = 0; i < N; i++) {
// console.log(sorted[i]);
// }
sorted.forEach(e => { console.log(e); });
nodeJS : 인터넷 뒤진 풀이
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');
let N = Number(input.shift());
let numArr = input.map(x => +x);
numArr.sort(function(a,b) {
if(a > b) return 1;
if(a === b) return 0;
if(a < b) return -1;
});
numArr.forEach(e => {
console.log(e);
})
백준은 nodejs로 답변을 제출해야한다.
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin')
.toString()
.trim()
.split('\n')
.map(num => parseInt(num));
const N = input.shift();
const sorted = input.sort((a, b) => a - b);
for (let i = 0; i < N; i++) {
console.log(sorted[i]);
}
공통으로
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin')
.toString()
.trim()
.split('\n')
.map(num => parseInt(num));
map() 함수는?
map() 메서드는 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환합니다.
const array1 = [1, 4, 9, 16];
// pass a function to map
const map1 = array1.map(x => x * 2);
console.log(map1);
// expected output: Array [2, 8, 18, 32]

require은 무엇일까?
require(), exports, module.exports 공식문서로 이해하기
.
medium.com
Require()함수는 module.exports를 리턴한다.
Require()함수의 소스코드는 복잡합니다.
하지만, 요약하자면 다음과 같은 모양새로 구성되어있습니다.
제 요약은 아니고, 문서에서 제시한 요약입니다. 링크는 여기서 맨 아래로!
var require = function(src){ //line 1
var fileAsStr = readFile(src) //line 2
var module.exports = {} //line 3
eval(fileAsStr) //line 4
return module.exports //line 5
}
- line 1에서는 src의 인자를 받아옵니다. 즉,
const foo = require('foo')
와 같은 경우, ‘foo’를 인자로 받아오는 식입니다.
를 한다는 것은, 곧 require()의 src 인자로 “./foo.js”를 넣는 식이고 위 require()의 line 4 는
eval(fileAsStr) //line 4
다음의 볼드체와 같이 변경되는 것과 마찬가지인 셈입니다.
var require = function(src){ //line 1
var fileAsStr = readFile(src) //line 2
var module.exports = {} //line 3
const a = 10
exports.a = a;
return module.exports //line 5
}
결국 exports 해시의 a라는 key에 10이 들어가는 셈입니다.
eval 함수는 무엇인가?
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/eval
eval() - JavaScript | MDN
eval()은 문자로 표현된 JavaScript 코드를 실행하는 함수입니다.
developer.mozilla.org
eval 안에 오는
(문자열, 표현식, 명령문)을 코드로 바꿔서 평가해서 값을 리턴한다
eval(new String("2 + 2")); // "2 + 2"인자를 받는 String을 평가해서 String 객체를 반환
eval("2 + 2"); // 표현식을 평가해 4를 반환

var expression = new String("2 + 2");
eval(expression.toString()); // 4를 반환

'학습 기록 (Learning Logs) > 백준' 카테고리의 다른 글
0301 intelliJ 세팅 + 단순 배열 합 (0) | 2022.03.01 |
---|