본문 바로가기

알고리즘/백준

[백준] 2750번 수 정렬하기

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은 무엇일까?

https://medium.com/@chullino/require-exports-module-exports-%EA%B3%B5%EC%8B%9D%EB%AC%B8%EC%84%9C%EB%A1%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-1d024ec5aca3

 

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를 반환

'알고리즘 > 백준' 카테고리의 다른 글

0301 intelliJ 세팅 + 단순 배열 합  (0) 2022.03.01