Algorithm/Study

[99클럽 코테 스터디] 📝 Day9. Java 너란 탐색. 친해지자료구조

ioh'sDeveloper 2024. 5. 28. 20:28
99클럽 코테 스터디 9일차 TIL + 완전탐색

📍오늘의 학습 키워드

  • 완전탐색
  • 시간 복잡도
  • 공간 복잡도
  • 문자열 조작
  • 사전 순서 계산

📝 공부한 내용 본인의 언어로 정리하기

오늘은 주어진 문자열이 사전에서 몇 번째 위치에 있는지 계산하는 문제를 풀었습니다. 완전탐색 방법을 사용해 각 자리의 알파벳 가중치를 계산하여 순서를 정하는 방식을 이해했습니다. 또한, 코드의 시간 복잡도와 공간 복잡도를 분석하여 효율성을 확인했습니다.

 

📖 오늘의 회고

📚 어떤 문제가 있었고, 나는 어떤 시도를 했는지

주어진 문자열이 알파벳 모음 'A', 'E', 'I', 'O', 'U'로 구성되어 있고, 길이 5 이하인 단어들이 사전에서 몇 번째 위치에 있는지 찾는 문제를 풀었습니다. 처음에는 각 자리의 알파벳 위치를 계산하고, 가중치를 곱하여 순서를 찾으려 했으나, 잘못된 계산 방식으로 인해 정확한 순서를 찾지 못했습니다.

🤔 어떻게 해결했는지

🔖 참고 링크 (https://develop-tracking.tistory.com/62)

실패 원인을 분석한 결과, 최종 순서 계산에서 단어의 길이를 더하는 부분이 잘못되었음을 발견했습니다. 이를 수정하기 위해 각 자리의 알파벳 위치를 더 정확히 계산하고, 가중치를 곱한 후, 단어의 길이를 더해 최종 순서를 구했습니다. 수정된 코드를 통해 정확한 결과를 얻을 수 있었습니다.

🤓 무엇을 새롭게 알았는지

  • 각 자리의 알파벳 위치를 고려한 가중치 계산 방법을 더 명확히 이해하게 되었습니다.
  • 시간 복잡도와 공간 복잡도를 분석하여, 상수 시간과 상수 공간 복잡도에 대한 개념을 새롭게 익혔습니다.
  • 문자열 조작과 사전 순서 계산 문제를 효율적으로 해결하는 방법을 배웠습니다.

⏳ 내일 학습할 것은 무엇인지

내일은 좀 더 복잡한 문자열 조작 문제를 풀어보며, 다양한 문자열 관련 알고리즘을 학습할 계획입니다. 특히, 트라이(Trie) 자료구조와 관련된 문제를 다루어 볼 것입니다. 또한, 시간 복잡도와 공간 복잡도를 더욱 심도 있게 분석하는 방법을 공부할 예정입니다.


📝 복잡도 분석

클럽장이 복잡도를 분석하고 설명해주는 부분에 대해서 나도 이런 내용은 설명에 추가해도 괜찮을것같아서 자세하게 추가하겠다.

  • 시간 복잡도: O(1)
  • 주어진 단어의 최대 길이가 5이므로, 각 자리의 위치를 찾는 루프는 상수 시간 내에 실행됩니다. 따라서, 시간 복잡도는 O(1)입니다.
  • 공간 복잡도: O(1)
  • 알파벳 배열과 가중치 배열은 모두 고정된 크기(5)를 가지며, 이는 상수 공간을 차지합니다. 따라서, 공간 복잡도는 O(1)입니다.

👩🏻‍💻 코딩 테스트를 위해 공부하며 내가 잊지 말아야 하는 내용

오늘부터 스터디에서 문제풀이 시간도 체크하기 시작했다 항상 여유롭게 공책에 끄적이면서 풀었었는데 이렇게 시간 체크까지 하라고 하니까,, 띵 했다.
아래는 코딩 테스트를 하고자 하는 사람들이 만약 나의 블로그를 본다면 참고했으면 좋겠다.



알고리즘 문제를 푸는 데 걸리는 시간은 개인의 숙련도와 문제의 난이도에 따라 다르지만, 일반적인 기준은 이렇게 생각한다.

주어진 문제와 같이 사전 순서와 문자열 조작을 다루는 문제는 보통 다음과 같은 시간 내에 풀리는 것이 이상적

 

🕰️ 알고리즘 문제 풀이 시간 기준

  1. 쉬운 문제:
    • 평균 15-20분: 기본적인 문자열 조작, 간단한 조건문과 루프를 사용하는 문제.
  2. 중간 난이도 문제:
    • 평균 30-45분: 약간의 알고리즘적 사고와 최적화를 요구하는 문제. 주어진 문제는 이 범주에 속한다고 볼 수 있습니다.
  3. 어려운 문제:
    • 평균 60-90분: 복잡한 알고리즘 설계, 최적화, 데이터 구조를 필요로 하는 문제.

🕰️ 내가 오늘 푼 문제..

주어진 문제는 주로 문자열 조작과 간단한 완전탐색을 필요로 하며, 크게 복잡한 알고리즘이나 데이터 구조를 요구하지 않았으니 따라서 중간 난이도에 해당하며, 평균적으로 약 30-45분 안에 해결하는 것이 적절하다는  

 

🕰️ 단계별 문제 풀이 시간 분배

  1. 문제 이해 및 계획 (5-10분):
    • 문제를 읽고, 이해한 후에 어떻게 접근할지 계획을 세우기 
    • 예제를 통해 문제를 더 깊이 이해합니다.
  2. 코딩 (15-25분):
    • 계획한 대로 코드를 작성합니다. (sudo 추천)
    • 주석을 달아가며, 각 부분이 무엇을 하는지 명확히 합니다.
  3. 테스트 및 디버깅 (10-15분):
    • 주어진 예제와 추가적인 테스트 케이스로 코드를 검증합니다. (IDE로 진행..)
    • 오류가 발생하면 디버깅하여 수정합니다.

향상 방안

  • 연습: 꾸준히 다양한 문제를 풀어보며, 알고리즘과 자료 구조에 익숙해지는 것이 중요합니다.
  • 문제 풀이 전략: 문제를 더 잘 이해하고, 빠르게 해결할 수 있는 전략을 익히는 것도 도움이 됩니다.
  • 시간 관리: 문제 풀이 시간을 정해두고, 그 시간 내에 해결하는 연습을 통해 실제 시험이나 인터뷰에서 효율적으로 문제를 해결할 수 있습니다.

따라서 주어진 문제를 30-45분 안에 풀어내는 것을 목표로 연습하면 좋습니다. 시간이 지나면 더 빠르고 정확하게 문제를 해결할 수 있게 될 것입니다.