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

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

by cogito21_js 2024. 9. 29.
반응형

모의 면접과 코드 리뷰 2

이번 글에서는 모의 면접과 코드 리뷰를 통해 코딩 테스트 준비를 마무리하겠습니다. 실제 면접 상황을 연습하고, 코드 리뷰를 통해 피드백을 받는 과정을 통해 문제 해결 능력을 더욱 향상시킬 수 있습니다.

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. 다른 사람의 코드 리뷰: 다른 사람의 코드를 리뷰하면서 다양한 관점을 배우고, 자신의 코드에 적용해봅니다.

연습 문제 2

문제 5: 중복 문자 제거

주어진 문자열에서 중복된 문자를 제거하고, 남은 문자들을 반환하세요.

예제

  • 입력: "aabbcc"
  • 출력: "abc"

JavaScript

function removeDuplicates(s) {
  return [...new Set(s)].join('');
}

console.log(removeDuplicates("aabbcc")); // "abc"
console.log(removeDuplicates("abcd")); // "abcd"

Python

def remove_duplicates(s):
    return ''.join(sorted(set(s), key=s.index))

print(remove_duplicates("aabbcc")) # "abc"
print(remove_duplicates("abcd")) # "abcd"

문제 6: 배열의 중복된 원소 제거

주어진 배열에서 중복된 원소를 제거하고, 남은 원소들을 반환하세요.

예제

  • 입력: [1, 1, 2, 3, 4, 4, 5]
  • 출력: [1, 2, 3, 4, 5]

JavaScript

function removeDuplicates(arr) {
  return [...new Set(arr)];
}

console.log(removeDuplicates([1, 1, 2, 3, 4, 4, 5])); // [1, 2, 3, 4, 5]

Python

def remove_duplicates(arr):
    return list(set(arr))

print(remove_duplicates([1, 1, 2, 3, 4, 4, 5])) # [1, 2, 3, 4, 5]

결론

이번 글에서는 모의 면접과 코드 리뷰를 통해 코딩 테스트 준비를 진행했습니다. 실제 면접 상황을 연습하고, 코드 리뷰를 통해 개선할 점을 찾는 과정이 중요합니다. 모든 준비가 끝났습니다. 최선을 다해

코딩 테스트에 응시하시기 바랍니다!

성공적인 코딩 테스트가 되기를 바랍니다!

 

반응형