[TIL 4일차] 데브코스 데이터엔지니어링

·2023년 4월 13일
0

데브코스

목록 보기
3/55
post-thumbnail

📚 오늘 공부한 내용

  • 실제 코딩 테스트 문제를 바탕으로 자료 구조와 알고리즘을 적용

1. 완주하지 못한 선수 - 해쉬(Hash)

✔ 나의 풀이

2. 체육복 - 탐욕법(Greedy)

✔ 나의 풀이

3. 가장 큰 수 - 정렬 (Sort)

✔ 나의 풀이

4. 큰 수 만들기 - 탐욕법 (Greedy)

✔ 나의 풀이

🔎 어려웠던 내용 & 새로 알게 된 내용

1. 완주하지 못한 선수 - 해쉬(Hash) 사용 문제

  • collections.Counter(list): list의 각 원소를 key로 가지고 그 원소의 count() 값을 value로 가지는 Dictionary를 생성해 준다. (Counter의 사용을 위해서는 import collections 필수로 해 주어야 함.)
  • Dictionary끼리 연산이 가능하다는 사실을 처음 알게 되었다. -> 두 Dictionary의 합이나 차를 알아야 하는 Counter를 사용해야 하는 문제의 경우 유용하게 쓰일 것 같다.

2. 체육복 - 탐욕법(greedy) 사용 문제

  • set은 교집합, 합집합, 차집합이 필요한 자료형을 구할 때 매우 유용하며 set(list)를 할 경우 list 원소의 중복 제거가 일어난다.
  • 다만 set 자료형은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다.
  • 교집합은 &, 합집합은 |, 차집합은 -로 구할 수 있다.

3. 정렬 - 가장 큰 수

  • 정렬을 DictionaryList의 경우 특정 조건으로 해 주고 싶을 때는 lambda 식을 이용해야 한다.
  • 해당 문제의 경우 int로 구성된 list의 원소들을 문자열로 바꿔 주어 사전 순으로 정렬해야 했기 때문에,
    numbers.sort(reverse=True, key = lambda x : str(x)*3)
    다음과 같은 lambda 식을 이용해 주었다.
  • 문제를 풀 때는 제한 사항을 하나씩 읽으며 예외의 가능성을 생각해야 한다.
  • 이 문제는 numbers의 원소가 0이 될 수 있다는 점을 이용하여 예외가 발생했는데 [0, 0, 0, 0]인 경우 문자열이어도 전체가 0이므로 0이 되어야 하는데 문자열로 바꾸는 과정에서 0000이 되는 케이스가 발생했고 이 부분에 대한 예외 처리를 해 주어야 한다는 것을 발견하는 데 시간이 걸렸다.

✍ 회고

코딩 테스트 문제를 풀면서 어떠한 자료구조와 알고리즘을 응용하는가 그리고 그에 따른 알고리즘 복잡도까지 따져 봤을 때 무엇이 더 효율적인가를 파악하는 것은 1차적으로 가장 중요한 것이라고 생각한다. 두 번째로 중요한 것은 제한 사항이나 기본적으로 제시된 파라미터의 환경을 꼼꼼하게 파악하여 예외가 되는 케이스들을 문제만 보고도 파악할 수 있어야 한다는 점인 것 같다. 문제를 풀며 정확성 테스트에서 특정 케이스만 막히는 경우가 빈번했는데 문제를 풀면서 그러한 예외들은 모두 제한 사항이나 주어진 환경에서 파악할 수 있다는 것을 느꼈다. 아직은 부족하고 꾸준히 공부해 나가야 할 부분이다.

profile
송의 개발 LOG

0개의 댓글