딕셔너리 4

[리트코드/leetcode/python] 347. Top K Frequent Elements

이 문제를 처음 봤을 때 계수정렬을 생각해봤습니다. nums[i]의 범위가 -10^4 부터 시작되므로, 음수도 포함될 수 도 있기에, 음수일 때와 양수일 때를 나눠서 계수정렬로 로직을 짰었습니다. 하지만, 계수정렬을 한 리스트가 내림차순되면서, k 번째까지 리스트를 슬라이싱 하는데에, 원소 순서가 변하기에 한계가 있었습니다. 어떤 수가 몇 번 나왔는지를 체크해야 하므로, 계수정렬보다는 딕셔너리 등을 사용하는 것이 더 적합했습니다. follow up을 보면, O(n log n)의 시간복잡도를 구현해보라고 하는데, 딕셔너리로 풀 때, O(n)으로 풀리는 것이 아닌가 하는 의구심으로 문제를 풀기 시작했습니다. 푼 코드는 아래와 같습니다. class Solution(object): def topKFrequent..

[리트코드/leetcode/python] 409. Longest Palindrome

주어진 문자열 s를 이용해서 만들 수 있는 가장 긴 팰린드롬을 구하는 문제입니다. 문자열 s는 대문자와 소문자가 구분해서 주어지고 만들어 질 수 있는 가장 긴 팰린드롬의 길이를 답으로 출력하면 됩니다. 처음에 접근했던 방법은 Discussion에서 해당 코멘트를 봤습니다. 한 유저가 남긴 코멘트였는데, 해시맵을 사용하면 된다고 해서 바로 딕셔너리를 생각해봤습니다. 주어진 문자열에서 문자가 나온 횟수를 value로 저장하고, 해당 문자를 key값으로 저장하는 딕셔너리를 생각해본다면, 가장 긴 팰린드롬의 길이는 짝수의 횟수를 가진 key값과 홀수값 중에서 최댓값을 가진 key값의 구성으로 만들어지겠다라는 것이 추론됩니다. 예를 들어서 설명해볼까요? "aabbsserrr" 이라는 문자열이 있다고 하면, 이 문..

[백준/알고리즘/python/java] 18870번 - 좌표 압축

이 문제도 처음에 시간제한에 걸려서 시간초과가 났었던 문제이다. 로직은 간단한데, 시간초과가 났다면, 분명 어떤 라이브러리를 사용하는 것이거나 더 효율적인 자료구조가 있는 것이다. 방법을 고수하지말고 바꿔야 하는 것을 명심하자. 문제마다 어떤 자료구조로 풀어야 효과적인지 판단하는 것도 중요한 것 같다. 맨 처음 풀었던 코드는 아래와 같다. import sys input = sys.stdin.readline N = int(input()) number_list = [int(num) for num in input().split()] sorted_number_list = sorted(number_list) for i in number_list: order = 0 seen = -1 for j in sorted_n..

[백준/알고리즘/python/java] 9375번 - 패션왕 신해빈

문제를 이해하면서, 파이썬의 딕셔너리 개념을 사용해야 한다고 생각했다. 딕셔너리는 기본적으로 중괄호({}) 를 사용해서 데이터를 묶는 형태를 띄며, 키(key)와 밸류(value)가 하나의 아이템(item)을 구성하게 된다. 즉, 딕셔너리에는 특정한 key값과 value 값이 서로 짝지어서 저장된다고 이해하면 편하다.(해쉬처럼 말이다.) 파이썬을 공부하면서 문제를 풀다 보니, 딕셔너리를 어떻게 사용해야 할지 감이 잘 안 왔다. 처음에 풀었던 코드는 아래와 같았다. (런타임 오류가 났었던 코드) testcase = int(input()) for test in range(testcase): n = int(input()) clothes = {} # clothes 라는 빈 딕셔너리 생성 for i in rang..

반응형