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

[코딩 테스트] 25일차: 실전 모의고사 - 모의 면접과 코드 리뷰

by cogito21_js 2024. 9. 25.
반응형

모의 면접과 코드 리뷰

코딩 테스트뿐만 아니라 실제 면접 상황에서의 코드 리뷰와 피드백 받기 역시 중요합니다. 이번 글에서는 모의 면접과 코드 리뷰를 통해 문제 해결 능력을 향상시키고, 실제 면접에서의 대응 능력을 키우겠습니다.

1. 모의 면접 준비

모의 면접을 통해 실제 면접 상황에서의 긴장감을 줄이고, 자신감을 향상시킬 수 있습니다.

  1. 면접 환경 조성: 실제 면접과 유사한 환경을 조성합니다.
  2. 질문 리스트 준비: 자주 묻는 코딩 문제와 기술 질문 리스트를 준비합니다.
  3. 면접관 역할: 친구나 동료에게 면접관 역할을 맡겨 실제 면접 상황을 연출합니다.

2. 코드 리뷰와 피드백

코드 리뷰는 작성한 코드를 다른 사람에게 검토받아, 개선할 점을 찾고 더 나은 코드를 작성하는 데 도움을 줍니다.

  1. 코드 공유: 작성한 코드를 공유하고, 리뷰를 받습니다.
  2. 리뷰 내용 반영: 받은 피드백을 바탕으로 코드를 개선합니다.
  3. 다양한 관점 수용: 다른 사람의 코드를 리뷰하면서 다양한 관점을 배우고, 적용해봅니다.

연습 문제

모의 면접을 통해 실제 문제를 풀어보고, 코드 리뷰를 통해 피드백을 받는 연습을 해봅니다.

문제 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

코드 리뷰 및 피드백

  1. 코드 공유: 작성한 코드를 다른 사람과 공유합니다.
  2. 리뷰 요청: 코드 리뷰를 요청하고, 피드백을 받습니다.
  3. 피드백 반영: 받은 피드백을 바탕으로 코드를 개선합니다.
  4. 다른 사람의 코드 리뷰: 다른 사람의 코드를 리뷰하면서 다양한 관점을 배우고, 자신의 코드에 적용해봅니다.

결론

이번 글에서는 모의 면접과 코드 리뷰를 통해 코딩 테스트 준비를 진행했습니다. 실제 면접 상황을 연습하고, 코드 리뷰를 통해 개선할 점을 찾는 과정이 중요합니다. 다음 글에서는 실전 모의고사 후 피드백 받기에 대해 알아보겠습니다.

다음 글에서 만나요!

 

반응형