백준 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

백준 2491번 - 수열

백준 2491번 바로가기 나의 풀이 # 입력 n = int(input()) arr = list(map(int,input().split())) sml2big = [1]*n big2sml = [1]*n # 처리 def find_max(data, dp): for i in range(n-1): if data[i] <= data[i+1]: dp[i+1] = dp[i] + 1 return max(dp) print(max(find_max(arr,sml2big),find_max(arr[::-1], big2sml))) CODE REVIEW dp를 이용한 문제. data[i]와 data[i+1]을 비교해서 크거나 같으면 count를 추가해주면 된다. 주어진 array를 뒤집으면 작거나 같다가 크거나 같다가 되기 때문에 함수 하나를 만들어놓고 arr과 arr[::-1]을 각각 입력했다. arr을 2차원, 3차원으로 확장하면 재밌는 문제를 만들어낼 수 있을 것 같다.

2023-5-31 · 1 min · 81 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