Hash?
개념 정리가 필요하다고 느껴서 글을 따로 발행했다.
완주하지 못한 선수
문제풀이
def solution(participant, completion):
answer = ''
pDict = {}
# 참가자/ 완주자 정보가 주어질 때, 이름을 key로 활용하여 dictionary 형태에 넣고 빼는 방식으로
# (동명이인이 있을 때에도) 어떤 이름을 가진 사람이 완주를 하지 못했는지 확인할 수 있다.
for p in participant:
pDict[p] = pDict.get(p, 0) + 1 #.get()을 통해 default 값을 세팅하는 한 방법
for p in completion:
pDict[p] -= 1
incompletion = [k for k, v in pDict.items() if v > 0]
answer = incompletion[0]
return answer
탐욕법(greedy algorithm)
체육복
문제풀이
큰 수 만들기
문제풀이
def solution(number, k):
collected = []
for i, num in enumerate(number):
# collected에 미리 들어간 원소가 있을 것
# 제일 마지막으로 들어간 원소는 현재 num 값보다 작을 것
# (제거해야 하는 숫자의 개수) k가 0보다 클 것
while len(collected) > 0 and collected[-1] < num and k >0:
collected.pop()
k -=1
if k == 0:
collected += list(number[i:])
break
collected.append(num)
# 제거해야 하는 숫자의 개수가 남아있을 때
# (코드가 너무 직관적이고 예뻤다. :>)
collected = collected[:-k] if k > 0 else collected
answer = ''.join(collected)
return answer
가장 큰 수
문제풀이
자릿수가 다른 숫자들을 문자열처럼 나열하여 더 큰 숫자를 만들 때, 숫자들의 우선순위를 정하는 방법은?
sortedNumbers = sorted(map(str, numbers), key = lambda x : (x * 4)[:4], reverse = True)
# map(str, numbers) : numbers 정수 리스트를 문자열 리스트로 변환
# sorted(..., reverse = True) : 주어진 조건으로 정렬하며, 내림차순으로 반환
# lambda x : (x*4)[:4] : 네 자리 수까지 주어지므로 4번 반복 후 네번째자리까지 끊음
Hash
list comprehension
list slicing 에 바로 대입하여 직관적으로 코드 작성 가능
어제 더 나은 코드를 위해 어떤점을 고려해야하는지 많은 고민을 했는데, 오늘 강의에서 그 부분을 짚어줘서 좋았다.
오늘은 각 알고리즘이나 자료구조에 대한 설명보다는 문제 풀이와 해설을 위주로 강의가 진행되었는데, 그래서 나 스스로 그 개념에 대해 찾아보고 정리하는 시간이 필요했다. greedy나 sort는 이미 잘 알고 있는 부분이지만 hash는 헷갈리는 부분이 있어서 블로그와 document를 읽어보면서 글로 정리하는 시간을 가졌다.
깊이가 정해져있지 않다 보니 원하는 만큼 궁금해하고 파헤칠 수 있었지만, 내가 그 내용을 받아들이고 정리할 수 있는가는 별개의 문제임을 깨달았다. hash를 설명하는 블로그 글에 연결된 링크를 타고 여러 글을 읽어가다 보니, 어느새 encoding&decoding, scheduling에 대한 글을 읽고 있었다. 이런 글들을 읽고 어느정도 이해할 수는 있었지만, 글로 정리하거나 그 사이의 관계를 명확하게 아는것은 큰 차이가 있었고, 머리속이 혼란스러웠다. 어떤 주제와 관련된 내용을 잘 찾고 정리하는것도 많은 노력이 필요하다는 걸 새삼 느끼는 순간이었다.
오늘처럼 깊이가 없는 공부를 해야하는 순간은 계속 있을것이고(있어왔고), 정해진 주제에 대해 찾아본 내용들을 글로 정리하면서 나만의 기준을 정립해야겠다는 결론을 내렸다.
+) 퇴고하기 위해 글을 읽어보는데 두서없고 추상적이라 맘에 들지 않음..(ㅠㅠ) 문장력을 키우고 싶은데 온라인으로도 필사할 수 있는지 찾아봐야겠다.
링크 타고타고 다른 곳으로 이동하는 거 공감되네요!! 글 잘 보고 갑니다!