Skip to content

Conversation

@uyeon0
Copy link
Collaborator

@uyeon0 uyeon0 commented Dec 6, 2025

User description

오늘도 멋져요 👍✨


PR Type

Enhancement


Description

  • 프로그래머스 레벨 2 문제 두 개 해결

  • 영어 끝말잇기 알고리즘 구현

  • 전화번호 목록 중복 검사 로직 추가

  • README.md에 문제 정보 업데이트


@uyeon0 uyeon0 added the programmers Programmers 문제 풀이 label Dec 6, 2025
@github-actions
Copy link

github-actions bot commented Dec 6, 2025

PR Reviewer Guide 🔍

🧪 No relevant tests
⚡ Recommended focus areas for review

Performance Optimization

현재 솔루션은 O(n) 시간 복잡도를 가지고 있습니다. 중복 검사와 끝말잇기 규칙 확인을 동시에 수행할 수 있는 더 효율적인 접근 방식을 고려해보세요.

function solution(n, words) {
  const wordSet = new Set();
  wordSet.add(words[0]);

  for (let cur = 1; cur < words.length; cur++) {
    if (wordSet.has(words[cur]) || words[cur - 1].at(-1) !== words[cur].at(0)) {
      const loser = (cur % n) + 1;
      const round = parseInt(cur / n) + 1;
      return [loser, round];
    } else {
      wordSet.add(words[cur]);
    }
  }

  return [0, 0];
Potential Optimization

현재 알고리즘은 두 번의 반복문을 사용하여 O(n²) 시간 복잡도를 가집니다. 트라이(Trie) 자료구조를 사용하면 시간 복잡도를 O(nm)로 개선할 수 있습니다.

function solution(phone_book) {
  const numberSet = new Set();
  for (const number of phone_book) {
    // 같은 전화번호가 중복해서 들어있지 않으므로 끝번호를 제외한 부분문자열만 구해준다.
    for (let len = 1; len < number.length; len++) {
      numberSet.add(number.substr(0, len));
    }
  }

  for (const number of phone_book) {
    if (numberSet.has(number)) {
      console.log(number);
      return false;
    }
  }

  return true;
}

@github-actions
Copy link

github-actions bot commented Dec 6, 2025

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
General
코드 효율성 및 불필요한 로깅 제거

불필요한 console.log를 제거하고, 첫 번째 반복에서 접두사를 확인하여 불필요한 두 번째 반복을 제거할 수 있습니다. 이를 통해 코드의 효율성을
높일 수 있습니다.

Programmers/Level2/42577_전화번호_목록.js [9-26]

 function solution(phone_book) {
   const numberSet = new Set();
   for (const number of phone_book) {
-    // 같은 전화번호가 중복해서 들어있지 않으므로 끝번호를 제외한 부분문자열만 구해준다.
     for (let len = 1; len < number.length; len++) {
-      numberSet.add(number.substr(0, len));
+      const prefix = number.substr(0, len);
+      if (numberSet.has(prefix)) return false;
     }
-  }
-
-  for (const number of phone_book) {
-    if (numberSet.has(number)) {
-      console.log(number);
-      return false;
-    }
+    numberSet.add(number);
   }
 
   return true;
 }
Suggestion importance[1-10]: 8

__

Why: The suggestion removes unnecessary console.log and optimizes the algorithm by checking prefixes in a single pass, reducing time complexity and improving code efficiency.

Medium
코드 가독성 및 성능 개선

현재 코드는 기본적으로 잘 작성되었지만, 가독성과 성능을 개선할 수 있습니다. 조기 반환 패턴을 사용하여 중첩된 조건을 줄이고, 코드의 명확성을 높일
수 있습니다.

Programmers/Level2/12981_영어_끝말잇기.js [9-24]

 function solution(n, words) {
-  const wordSet = new Set();
-  wordSet.add(words[0]);
+  const wordSet = new Set([words[0]]);
 
   for (let cur = 1; cur < words.length; cur++) {
-    if (wordSet.has(words[cur]) || words[cur - 1].at(-1) !== words[cur].at(0)) {
-      const loser = (cur % n) + 1;
-      const round = parseInt(cur / n) + 1;
-      return [loser, round];
-    } else {
-      wordSet.add(words[cur]);
+    const prevWord = words[cur - 1];
+    const currentWord = words[cur];
+
+    if (wordSet.has(currentWord) || prevWord.at(-1) !== currentWord.at(0)) {
+      return [(cur % n) + 1, Math.floor(cur / n) + 1];
     }
+
+    wordSet.add(currentWord);
   }
 
   return [0, 0];
 }
Suggestion importance[1-10]: 7

__

Why: The suggestion improves code readability by introducing clearer variable names and simplifying the logic. The core algorithm remains unchanged, making it a moderate improvement.

Medium

@yoouyeon yoouyeon changed the title 2025-12-06 문제 풀었어요 2025-12-05 문제 풀었어요 Dec 6, 2025
@yoouyeon yoouyeon added the ready-to-merge pr을 머지해주세요 label Dec 6, 2025
@uyeon0 uyeon0 merged commit e2d8824 into main Dec 6, 2025
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

programmers Programmers 문제 풀이 ready-to-merge pr을 머지해주세요

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants