다다의 개발일지 6v6

[백준] 10988번. 팰린드롬인지 확인하기 ( 함수 밖에 있는 return이 왜 적용될까?) 본문

Frontend/코딩테스트 (JS)

[백준] 10988번. 팰린드롬인지 확인하기 ( 함수 밖에 있는 return이 왜 적용될까?)

dev6v6 2025. 1. 22. 09:02

내가 푼 풀이 인데 return을 사용하면서도 함수가 아닌데 왜 return이 될까 궁금해서 알아보았다.

const fs = require("fs");
const input = fs.readFileSync("ex.txt", "utf-8").toString().trim().split("");

const len = input.length;

for (let i = 0; i < (len - 1) / 2; i++) {
  if (input[i] !== input[len - 1 - i]) {
    console.log(0);
    return;
  }
}

console.log(1);

 

우선 나는 node.js로 알고리즘을 풀고 있다.

 

node.js는 각 파일을 독립적인 모듈로 취급하며, 파일의 내용은 사실상 암묵적으로 함수로 감싸져 있는 형태로 실행된다.

 

예를 들어,

파일 내용이 아래와 같으면
console.log("Hello, World!");​

 

Node.js 내부적으로는 아래와 비슷한 형태로 실행된다:

(function (exports, require, module, __filename, __dirname) { console.log("Hello, World!"); });

 

즉, 파일 내에서 작성된 코드는 함수 내부에 포함된 것처럼 동작한다. 따라서 파일의 최상위 레벨에서 return을 사용하면, 암묵적으로 감싸진 함수에서 return이 실행되는 것으로 간주된다. 결과적으로 node.js에서는 return이 동작하는 것이다.


그렇다면 브라우저 환경에서는 어떨까?

 

브라우저에서는 스크립트가 전역 컨텍스트에서 실행되기 때문에, return을 파일 최상위 레벨에서 사용할 수가 없다. 문법적으로 오류를 발생시키는 것이다.

 

정리
  • Node.js: 파일이 모듈로 실행되며, 암묵적으로 함수로 감싸져 있기 때문에 return이 동작함.
  • 브라우저 환경: 전역 컨텍스트에서 return은 문법 오류를 발생시킴.

따라서 Node.js를 사용하는 코딩테스트에서는 최상단에서 return을 사용해 빠르고 효율적으로 풀 수 있지만! 브라우저에서는 함수 내에서만 가능하기 때문에 최대한 주의를 하면서 사용해야 할 것 같다.

 

 

아래 처럼 break와 true, false를 이용하는 방법도 있다!

const len = input.length;
let isPalindrome = true;

for (let i = 0; i < len / 2; i++) {
  if (input[i] !== input[len - 1 - i]) {
    isPalindrome = false;
    break; // 루프를 즉시 종료
  }
}

console.log(isPalindrome ? 1 : 0);