본문 바로가기
코딩테스트1

[코딩 테스트] 24일차: 실전 모의고사 - 제한 시간 내 문제 풀기

by cogito21_js 2024. 9. 24.
반응형

실전 모의고사

코딩 테스트를 잘 준비하기 위해서는 실제 코딩 테스트 환경과 유사한 조건에서 문제를 풀어보는 것이 중요합니다. 이번 글에서는 제한 시간 내에 문제를 해결하는 방법을 연습합니다. 아래 예제 문제들을 제한 시간 내에 풀어보세요.

문제 1: 두 수의 합

주어진 배열에서 두 수를 더해 특정 숫자가 되는 두 수의 인덱스를 찾으세요.

JavaScript

function twoSum(nums, target) {
  const map = new Map();
  for (let i = 0; i < nums.length; i++) {
    const complement = target - nums[i];
    if (map.has(complement)) {
      return [map.get(complement), i];
    }
    map.set(nums[i], i);
  }
  return null;
}

console.log(twoSum([2, 7, 11, 15], 9)); // [0, 1]

Python

def two_sum(nums, target):
    num_map = {}
    for i, num in enumerate(nums):
        complement = target - num
        if complement in num_map:
            return [num_map[complement], i]
        num_map[num] = i
    return None

print(two_sum([2, 7, 11, 15], 9)) # [0, 1]

문제 2: 가장 긴 증가하는 부분 수열 (LIS)

주어진 배열에서 가장 긴 증가하는 부분 수열의 길이를 구하세요.

JavaScript

function lengthOfLIS(nums) {
  if (nums.length === 0) return 0;

  const dp = new Array(nums.length).fill(1);

  for (let i = 1; i < nums.length; i++) {
    for (let j = 0; j < i; j++) {
      if (nums[i] > nums[j]) {
        dp[i] = Math.max(dp[i], dp[j] + 1);
      }
    }
  }

  return Math.max(...dp);
}

console.log(lengthOfLIS([10, 9, 2, 5, 3, 7, 101, 18])); // 4

Python

def length_of_lis(nums):
    if not nums:
        return 0

    dp = [1] * len(nums)

    for i in range(1, len(nums)):
        for j in range(i):
            if nums[i] > nums[j]:
                dp[i] = max(dp[i], dp[j] + 1)

    return max(dp)

print(length_of_lis([10, 9, 2, 5, 3, 7, 101, 18])) # 4

문제 3: 유효한 괄호

주어진 문자열이 유효한 괄호인지 확인하세요. 괄호는 '(', ')', '{', '}', '[', ']' 만 포함됩니다.

JavaScript

function isValid(s) {
  const stack = [];
  const map = {
    '(': ')',
    '{': '}',
    '[': ']'
  };

  for (let char of s) {
    if (map[char]) {
      stack.push(map[char]);
    } else if (stack.length > 0 && stack[stack.length - 1] === char) {
      stack.pop();
    } else {
      return false;
    }
  }

  return stack.length === 0;
}

console.log(isValid("()")); // true
console.log(isValid("()[]{}")); // true
console.log(isValid("(]")); // false

Python

def is_valid(s):
    stack = []
    mapping = {')': '(', '}': '{', ']': '['}

    for char in s:
        if char in mapping:
            top_element = stack.pop() if stack else '#'
            if mapping[char] != top_element:
                return False
        else:
            stack.append(char)

    return not stack

print(is_valid("()")) # True
print(is_valid("()[]{}")) # True
print(is_valid("(]")) # False

문제 4: 이진 트리의 최대 깊이

주어진 이진 트리의 최대 깊이를 구하세요.

JavaScript

class TreeNode {
  constructor(val, left = null, right = null) {
    this.val = val;
    this.left = left;
    this.right = right;
  }
}

function maxDepth(root) {
  if (!root) return 0;
  return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
}

const root = new TreeNode(3, new TreeNode(9), new TreeNode(20, new TreeNode(15), new TreeNode(7)));
console.log(maxDepth(root)); // 3

Python

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def max_depth(root):
    if not root:
        return 0
    return max(max_depth(root.left), max_depth(root.right)) + 1

root = TreeNode(3, TreeNode(9), TreeNode(20, TreeNode(15), TreeNode(7)))
print(max_depth(root)) # 3

결론

이번 글에서는 제한 시간 내에 문제를 해결하는 실전 모의고사를 통해 코딩 테스트를 준비했습니다. 실제 테스트 환경과 유사한 조건에서 연습해보며, 시간 관리와 문제 해결 능력을 향상시킬 수 있습니다. 다음 글에서는 모의 면접과 코드 리뷰에 대해 알아보겠습니다.

다음 글에서 만나요!

 

반응형