PHP와 자바스크립트는 웹 개발에서 가장 널리 사용되는 두 언어지만, 실행 환경과 동작 방식에서 뚜렷한 차이가 있습니다. 이 글에서는 두 언어의 핵심 특징과 차이점을 예제 코드와 함께 살펴봅니다.자바스크립트(JavaScript)란?프론트엔드와 백엔드 양쪽 모두에서 활용할 수 있는 만능 언어입니다.비동기(asynchronous) 방식으로 동작하기 때문에 입출력(I/O) 작업이 완료될 때까지 대기하지 않습니다.브라우저 환경에서 실행되며, Node.js가 등장한 이후에는 명령줄(터미널)에서도 실행할 수 있게 되었습니다.HTML, AJAX
문제 소개숫자를 첫 번째이자 유일한 인수로 받아 처리하는 JavaScript 함수를 작성해야 합니다.함수가 해야 할 일은 숫자의 두 자릿수를 최대 한 번 교환(swap)하여 만들 수 있는 가장 큰 수를 반환하는 것입니다. 만약 주어진 숫자가 이미 가능한 최댓값이라면, 해당 숫자를 그대로 반환하면 됩니다.예시입력 숫자가 다음과 같다면,const num = 1625;출력은 다음과 같아야 합니다.const output = 6125;첫째 자리의 1과 둘째 자리의 6을 서로 교환하면 되는데, 이것이 단 한 번의 스왑으로 얻을 수 있는 가장
완전제곱수란?수학에서 어떤 자연수를 제곱하여 얻을 수 있는 수를 완전제곱수(perfect square)라고 합니다.예를 들어 9, 16, 81, 289는 모두 완전제곱수입니다. 각각 3², 4², 9², 17²에 해당합니다.문제 정의자연수 num을 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 다음 조건을 만족하는 두 수 m과 n이 존재하는지 판별해야 합니다.(m * m) + (n * n) = num만약 그런 두 수가 존재한다면 함수는 true를 반환하고, 존재하지 않으면 false를 반환해야 합니다.예
문제 소개다음과 같이 0 또는 1만 포함하는 이진 행렬(배열의 배열)이 있다고 가정해 보겠습니다.const arr = [ [0,1,1,0], [0,1,1,0], [0,0,0,1] ];이러한 행렬을 첫 번째이자 유일한 인수로 받아 처리하는 JavaScript 함수를 작성해야 합니다.문제 설명함수의 목표는 행렬에서 연속된 1로 이루어진 가장 긴 줄을 찾아, 그 줄에 포함된 1의 개수를 반환하는 것입니다. 줄의
문제 소개이진 행렬(Binary Matrix)이란 0 또는 1만 포함하는 배열의 배열을 의미합니다. 이번 글에서는 이진 행렬을 유일한 인자로 받아, 각 위치에서 가장 가까운 0까지의 거리를 계산한 새로운 행렬을 반환하는 JavaScript 함수를 작성해 보겠습니다.결과 행렬은 원본 행렬과 동일한 행과 열의 개수를 가져야 하며, 각 요소에는 원본 행렬에서 해당 위치가 0으로부터 떨어져 있는 최단 거리가 저장됩니다.여기서 중요한 조건은 두 가지입니다. 첫째, 거리를 계산할 때 상하좌우(가로·세로) 방향으로만 이동할 수 있으며 대각선 이
이번 글에서는 문자열 str을 첫 번째 인수로, 정수 num을 두 번째 인수로 받아 특정 규칙에 따라 문자열을 반전하는 JavaScript 함수를 작성해 보겠습니다. 동작 규칙 정리 함수는 문자열 시작부터 2 * num개의 문자를 하나의 블록으로 보고, 각 블록에서 앞의 num개 문자만 반전한 뒤 나머지는 원래 순서 그대로 둡니다. 세부 규칙은 다음과 같습니다. 남은 문자가 num개보다 적다면 → 남은 문자 전체를 반전합니다. 남은 문자가 num개 이상이면서 2 * num개 미만이라면 → 앞의 num개만 반전하고 나머지는 그대로
bit.ly나 tinyurl 같은 URL 단축 서비스를 자주 접하게 됩니다. 이런 서비스는 길이가 긴 원본 URL을 받아 일종의 변환(암호화) 알고리즘을 적용한 뒤 훨씬 짧은 URL을 반환합니다. 그리고 사용자가 단축된 URL에 접속하면 역으로 복호화 알고리즘을 실행해 원래의 긴 URL로 되돌린 후 해당 링크를 열어주죠.이번 글에서는 바로 이 작업을 JavaScript로 직접 구현해 보겠습니다. 구현해야 할 함수는 두 가지입니다.encrypt() — 원본 URL을 입력받아 고유하고 짧은 단축 URL을 반환합니다.decrypt() —
문제 소개숫자 데이터를 담고 있는 이진 탐색 트리(Binary Search Tree, BST)의 루트 노드를 입력으로 받는 JavaScript 함수를 작성해야 합니다. 예를 들어 다음과 같은 트리가 있다고 가정해 보겠습니다.1 \ 3 / 2이때 함수는 트리에 있는 임의의 두 노드 값 사이의 최소 절대 차이(최소 절댓값 차이)를 반환해야 합니다.위 트리의 경우 출력 결과는 다음과 같습니다.const output = 1;그 이유는 |1 - 2| = |3 - 2| = 1 이기 때문입니다. 즉, 두 노드 값의 차이 중 가장 작은 값
문제 정의영어 소문자 알파벳으로만 구성된 문자열이 하나 있다고 가정해 봅시다. 이 문제에서는 한 글자의 단위 이동(unit shift)을 해당 문자를 알파벳상 바로 다음 문자로 바꾸는 것으로 정의합니다. 단, 순환(circular) 처리가 포함되므로 z 다음에는 다시 a가 옵니다.우리는 첫 번째 인수로 문자열 str을, 두 번째 인수로 str과 길이가 같은 숫자 배열 arr을 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 원본 문자열의 각 문자를 배열 arr에 담긴 해당 값만큼 이동시킨 새로운 문자열을 반환해야 합니다
문제 이해하기소문자 영어 알파벳으로 이루어진 문자열 str과 배열의 배열 arr이 주어져 있다고 가정해 보겠습니다. 각 요소는 arr[i] = [direction, amount] 형태를 가집니다.direction은 0(왼쪽 시프트) 또는 1(오른쪽 시프트)입니다.amount는 문자열을 시프트할 횟수입니다.왼쪽으로 1 시프트란 첫 번째 문자를 제거하여 맨 뒤에 붙이는 것을 의미합니다.마찬가지로 오른쪽으로 1 시프트란 마지막 문자를 제거하여 맨 앞에 추가하는 것을 의미합니다.우리는 첫 번째 인자로 문자열을, 두 번째 인자로 시프트 정보
등차수열이란?등차수열(Arithmetic Progression, AP)은 연속된 두 항 사이의 차이, 즉 공차가 항상 일정하게 유지되는 수열을 말합니다.예를 들어 5, 7, 9, 11, 13... 과 같은 수열은 매번 2씩 증가하므로 대표적인 등차수열입니다.문제 정의등차수열의 요소들이 순서대로 담긴 배열이 하나 있다고 가정해 보겠습니다. 그런데 어떤 이유에서인지 수열의 숫자 하나가 누락되어 버렸습니다. 우리는 이 배열을 첫 번째이자 유일한 인수로 받아 처리하는 JavaScript 함수를 작성해야 합니다.작성할 함수는 단 한 번의 반
혼동 숫자(Confusing Number)란?배열 속 어떤 숫자를 수직·수평으로 180도 회전했을 때, 그 결과가 배열에 존재하는 다른 숫자가 된다면 이를 혼동 숫자(confusing number)라고 합니다. 예를 들어, 6을 180도 회전하면 9가 되고, 반대로 9를 회전하면 6이 됩니다.단, 180도 회전 후에도 유효한 숫자가 되는 것은 0, 1, 6, 8, 9뿐이라는 점에 유의해야 합니다. 2, 3, 4, 5, 7은 회전하면 올바른 숫자가 되지 않으므로 혼동 숫자가 될 수 없습니다.문제 정의자연수 num을 첫 번째이자 유일한
문제 소개숫자 배열을 첫 번째이자 유일한 인자로 받아 처리하는 JavaScript 함수를 작성해 보겠습니다. 이 함수가 수행해야 할 작업은 다음과 같습니다.배열에서 가장 작은 숫자를 찾습니다.찾은 숫자의 모든 자릿수를 더해 합계를 구합니다.자릿수 합이 짝수이면 true, 홀수이면 false를 반환합니다.입력 예시const arr = [12, 657, 23, 56, 34, 678, 42];이 경우 기대되는 출력 결과는 다음과 같습니다.const output = false;그 이유는 배열에서 가장 작은 숫자가 12이고, 자릿수 합은 1
문자열 GCD란 무엇인가?수학에서 두 수의 최대공약수(GCD, Greatest Common Divisor)는 두 수를 모두 나눌 수 있는 가장 큰 수를 의미합니다. 흥미롭게도 이 개념은 문자열에도 그대로 적용할 수 있습니다.두 문자열의 GCD란, 두 문자열 모두에 존재하는 가장 긴 공통 부분 문자열을 뜻합니다. 여기서 핵심은 단순히 겹치는 부분을 찾는 것이 아니라, 두 문자열이 모두 동일한 패턴의 반복으로 구성되어 있어야 한다는 점입니다.예시다음과 같은 두 문자열이 있다고 가정해 보겠습니다.const str1 = abcabc; co
단어 사각형(Word Square)이란?단어 사각형은 여러 개의 단어를 정사각형 격자 형태로 배치한 것으로, 가로로 읽은 단어와 세로로 읽은 단어가 서로 동일하도록 구성된 배열을 말합니다.예를 들어, 다음은 유효한 단어 사각형의 대표적인 예시입니다.H E A R TE M B E RA B U S ER E S I NT R E N D위 배열에서 첫 번째 행을 가로로 읽으면 HEART이고, 첫 번째 열을 세로로 읽어도 HEART입니다. 두 번째 행과 열 역시 모두 EMBER로 일치하며, 나머지 행과 열도 같은 방식으로 대칭을 이룹니다.문제
문제 설명소문자로만 구성되어 있고 오름차순으로 정렬된 문자 배열 letters와 목표 문자 target이 주어졌다고 가정해 봅시다.우리는 배열을 첫 번째 인수로, 목표 문자를 두 번째 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 배열에서 목표 문자보다 큰 요소 중 가장 작은 것을 찾아 반환해야 합니다.여기서 중요한 점은 문자가 순환(wrap around)한다는 것입니다. 즉, 목표가 z이고 배열이 [a, b]라면 z보다 큰 문자가 존재하지 않으므로 다시 처음으로 돌아가 답은 a가 됩니다.예시입력 배열과 목표
회문 수열이란?회문(팰린드롬) 수열은 앞에서 읽으나 뒤에서 읽으나 완전히 동일한 문자열 시퀀스를 의미합니다. 예를 들어 aba, madam, did는 모두 유효한 회문입니다.이번 글에서는 문자열을 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해 보겠습니다. 입력 문자열은 a, b, c, d 네 가지 문자로만 구성된다고 보장되며, 함수는 해당 문자열에 등장하는 모든 연속 또는 비연속 회문 부분 수열의 개수를 세어 반환해야 합니다.문제 예시입력 문자열이 다음과 같다고 가정해 보겠습니다.const str = bccb;이
이번 글에서는 숫자 배열 arr을 첫 번째 인수로, 숫자 num을 두 번째 인수로 받는 JavaScript 함수를 작성해 보겠습니다.이 함수의 목표는 배열의 모든 요소를 num개의 그룹에 나누되, 각 그룹의 합이 서로 동일하게 만들 수 있는지 판단하는 것입니다. 가능한 방법이 하나라도 존재하면 true를 반환하고, 존재하지 않으면 false를 반환합니다.문제 예시예를 들어 다음과 같은 입력이 주어졌다고 가정해 보겠습니다.const arr = [4, 6, 3, 3, 7, 4, 1]; const num = 4;배열 요소의 전체 합은 2
문제 이해하기숫자 배열을 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 배열의 모든 숫자가 한 번씩만 나타나는 경우, 즉 모든 숫자가 고유(unique)하면 true를 반환하고, 하나라도 중복되면 false를 반환해야 합니다.예를 들어 입력 배열이 다음과 같다고 가정해 보겠습니다.const arr = [12, 45, 6, 34, 12, 57, 79, 4];이 경우 출력은 다음과 같아야 합니다.const output = false;그 이유는 배열 안에서 숫자 12가 두 번 등장하기 때문입니다.
이번 글에서는 정수 배열을 입력받아, 배열 안에서 딱 한 번만 등장하는 숫자 중 가장 큰 값을 반환하는 JavaScript 함수를 작성해 보겠습니다.문제 정의함수는 정수 배열을 첫 번째이자 유일한 인자로 받습니다. 이후 배열을 순회하면서 오직 한 번만 나타난 숫자들 중 최댓값을 골라 반환해야 합니다.만약 배열에 고유한(중복되지 않은) 숫자가 하나도 없다면 -1을 반환하면 됩니다.추가로 문제에서는 다음과 같은 조건을 제시합니다. 배열의 모든 요소는 0보다 크고 100보다 작거나 같다는 것입니다.0 < arr[i] <= 10