백준 1764번 - 듣보잡

백준 1764번 바로가기 나의 풀이 import sys n, m = map(int, sys.stdin.readline().split()) set1 = set() set2 = set() for i in range(n): name = sys.stdin.readline().rstrip() set1.add(name) for _ in range(m): name = sys.stdin.readline().rstrip() set2.add(name) db_list = (set1 & set2) print(len(db_list)) for i in sorted(db_list): print(i) CODE REVIEW set()을 이용하여 풀어내는 문제. set1과 set2의 교집합은 set1 & set2로 합집합은 set1 | set2로 구하는 것을 기억해두자. 알파벳 순으로 정렬해서 출력해야하는데 set에는 sort() 메소드를 바로 적용할 수 없다. sorted()로 감싸주거나, list로 감싼 뒤에 sort() 메소드를 사용하자.

2023-6-3 · 1 min · 83 words · Junha

프로그래머스 - 완주하지 못한 선수

완주하지 못한 선수 문제 바로가기 나의 풀이 from collections import Counter def solution(participant, completion): participant = Counter(participant) for c in completion: participant[c] -= 1 if participant[c] == 0: participant.pop(c) return list(participant.keys())[0] 고수의 풀이 import collections def solution(participant, completion): answer = collections.Counter(participant) - collections.Counter(completion) return list(answer.keys())[0] CODE REVIEW 단순히 arr1에서 arr2를 빼면 안되나 싶지만, 탐색하는데 시간이 오래걸려서 hash를 사용하는 편이 낫다. collections 모듈의 Counter을 사용했는데, 고수의 풀이를 보니 Counter에서 Counter을 뺄 수 있다는 점에서 한 수 배워간다.

2023-5-31 · 1 min · 76 words · Junha

프로그래머스 - 의상

의상 문제 바로가기 나의 풀이 def solution(clothes): wardrobe = {} for c in clothes: if c[1] in wardrobe: wardrobe[c[1]] += 1 else: wardrobe[c[1]] = 1 temp = 1 print(wardrobe.values()) for i in list(wardrobe.values()): temp *= (i+1) return temp-1 고수의 풀이 def solution(clothes): from collections import Counter from functools import reduce cnt = Counter([kind for name, kind in clothes]) answer = reduce(lambda x, y: x*(y+1), cnt.values(), 1) - 1 return answer CODE REVIEW 옷입히기 게임같은 문제. (의상 종류+1)를 각각 곱해주고 마지막에 1을 빼면 답이 나온다. reduce() 메소드은 처음 보는데 python docs에서 관련 정보를 찾을 수 있었다. 어떤 iterable한 것에서 single value가 될 때 까지 과정을 반복하는 메소드이다. for문을 축약해주긴 하지만 가독성이 떨어져서 자주 사용할 것 같진 않다. 일단 알아두자!

2023-5-31 · 1 min · 118 words · Junha

프로그래머스 - 전화번호 목록

전화번호 목록 문제 바로가기 나의 풀이 def solution(phone_book): phone_book.sort() for i in range(len(phone_book)-1): if (p:=phone_book[i]) == phone_book[i+1][:len(p)]: return False return True 고수의 풀이 def solution(phoneBook): phoneBook = sorted(phoneBook) for p1, p2 in zip(phoneBook, phoneBook[1:]): if p2.startswith(p1): return False return True CODE REVIEW 주어진 arr을 sort한 뒤에 두 개씩 짝 지어서 비교하는 방식을 택했다. 고수의 풀이를 살펴보면, phoneBook과 phoneBook[1:] 리스트를 두 개 만들어놓고 비교하는 방식을 택했다. startswith() method가 있구나! 잘 안써서 까먹었는데, 이번에 알아두자. 슬라이싱 없이도 확인 가능하게 해주는 유용한 메소드이다.

2023-5-31 · 1 min · 80 words · Junha

프로그래머스 - 폰켓몬

폰켓몬 문제 바로가기 나의 풀이 def solution(nums): n_poke = len(nums) n_nums = len(set(nums)) if n_poke//2 <= n_nums: return n_poke//2 else: return n_nums CODE REVIEW 간단한 해시 문제. set()을 이용해서 종류를 구하고, (전체길이의 절반)과 비교하여 알맞게 값을 return하면 된다. collections 모듈의 Counter을 사용하면 더 편할 듯 하다.

2023-5-31 · 1 min · 46 words · Junha