
리트코드(LeetCode) 819번 가장 흔한 단어(Most Common Word)
2021. 9. 8. 13:19
Algorithm
문제의 조건 금지된 단어를 제외한 가장 흔하게 등장하는 단어를 출력하라. 대소문자 구분을 하지 않으며, 구두점(마침표, 쉼표) 또한 무시한다. 📌 (잘못된) 풀이 1(문자의 길이가 1인 테스트 케이스 미통과) collections 모듈은 기본적으로 파이썬에 내장되어있는 내장 함수이다. 따라서 따로 설치가 필요 없다. collections.Counter(a) a에서 요소들의 개수를 세어, 딕셔너리 형태로 반환한다. {문자 : 개수} 형태 import collections a = [1, 2, 3, 4, 1, 5, 3, 1, 3, 4, 2, 3] print(collections.Counter(a)) ... Counter({3: 4, 1: 3, 2: 2, 4: 2, 5: 1})) collections.Count..

백준 알고리즘 파이썬(Python) 6603번 로또
2021. 9. 5. 15:58
Algorithm
풀이 1 itertools의 permutation을 사용한 풀이이다. 우선 arr에 입력값을 받고 arr의 첫 번째 원소를 pop(0)을 통해 빼준다. 그리고 permutation을 통해 모든 경우의 수를 arr_p에 넣어주고 그중 정렬되어있는 리스트들만 print 해주면 된다. 하지만 permutaion을 사용하였기 때문에 시간복잡도가 O(n!)여서 아슬아슬하게 통과하게 된다. import sys from itertools import permutations input = sys.stdin.readline while True: arr = list(map(int, input().split())) n = arr.pop(0) arr_p = list(permutations(arr, 6)) for case in..

백준 알고리즘 파이썬(Python) 10819번 차이를 최대로
2021. 9. 5. 13:57
Algorithm
permutation 순열이란 몇 개를 골라 순서를 고려해 나열한 경우의 수를 말한다. 즉, 서로 다른 n 개 중 r 개를 골라 순서를 정해 나열하는 가짓수이며 순열이라는 의미의 영어 ‘Permutation’의 첫 글자 P를 따서 nPr로 표시한다. 순열은 순서를 고려하기 때문에 [A, B, C]의 리스트에서 2개의 원소를 골라 순서를 정해 나열하면 [(A, B), (A, C), (B, A), (B, C), (C, A), (C, B)] 가 나오게 된다. 즉 순열에서는 (A, B)와 (B, A)는 다른 것이다. from itertools import permutation arr = ['A', 'B', 'C'] nPr = permutations(arr, 2) #어떤 리스트에서 몇개의 원소를 조합할건지 pri..

리트코드(LeetCode) 937번 로그 파일 재정렬(Reorder Data in Log Files)
2021. 9. 2. 11:27
Algorithm
이 문제의 조건을 요약하자면 로그의 가장 앞 부부분은 식별자이다. 문자로 구성된 로그가 숫자 로그보다 앞에 온다. 식별자는 순서에 영향을 끼치지 않지만, 문자가 동일할 경우 식별자 순으로 한다. 숫자 로그는 입력 순서대로 한다. 📌 풀이 문제에서 문자로 구성된 로그가 숫자보다 앞에 온다 했으니 우선 문자로 구성된 로그와 숫자로 구성된 로그를 분리해서 각 리스트에 저장하는 작업이 필요하다. (추후에 숫자로 구성된 로그는 + 를 이용해 이어 붙여 주기만 하면 된다.) 문자로 구성되있는지를 확인하기 위해 isdigit( )을 사용하여 준다. isdigit( )은 문자열이 숫자인지를 확인해서 boolean값을 return해주는 메소드이다. letters, digits = [], [] for log in logs..

리트코드(LeetCode) 125번 Valid Palindrome (유효한 팬린드롬)
2021. 8. 31. 17:12
Algorithm
Palindrome(팰린드롬) 이란 무엇일까? 팬린드롬이란 앞뒤가 똑같은 단어나 문장으로, 뒤집어도 같은 말이 되는 단어 또는 문장이다 예를 들어 '토마토' 'level' 같은 단어들이 팬린드롬이라 할 수 있다. 이 문제는 주어진 문자열이 팰린드롬인지 확인하는 문제이다. 대소문자는 구분하지 않으며, 영문자와 숫자만을 대상으로 한다. 📌 첫번째 풀이 : 리스트로 변환 직접 문자열을 받아 단어가 영문자 또는 숫자인지 확인한다 (특수문자인 것을 거르기 위한 작업) strs = [] for char in s: if char.isalnum(): strs.append(char.lower()) 여기서 isalnum( ) 메소드는 영문자, 숫자 여부를 판별하는 함수로, 이를 이용해 해당하는 문자만을 strs리스트에 추..