목록Algorithm (55)
눈송이의 개발생활
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/EMOSB/btrxNXYafmi/iTWnqYxCQlwK4Tuyky1Ac1/img.png)
문제 https://programmers.co.kr/learn/courses/30/lessons/77484 내 코드 def solution(lottos, win_nums): answer = [] match = 0 nomatch = 0 for item in lottos: if item in win_nums: match += 1 # number of matching numbers elif item == 0 : nomatch += 1 answer.append(7 - (match + nomatch if match+nomatch > 1 else 1)) answer.append(7 - (match if match >= 2 else 1)) return answer 다른 사람 풀이 def solution(lottos,..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bZQYUj/btrxED6sawI/2zpaiaKdmvcnbjaIxi9JNK/img.png)
문제 https://programmers.co.kr/learn/courses/30/lessons/42889 내 코드 def solution(N, stages): answer = {} stages.sort() for i in range(1, N + 1): # 스테이지 성공 사람 수 c = stages.count(i) if c == 0: answer[i] = 0 # 스테이지 성공한 사람 수 / 스테이지 모든 사람 수 else: answer[i] = c / len(stages) # 성공한 사람만큼 앞에서부터 stack에서 없애기 for _ in range(c): stages.pop(0) # 딕셔너리 정렬하기 st = dict(sorted(answer.items(), key=lambda item: item[1]..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/CgbN3/btrxjGKdaij/xcKFszWRJQK9HuQKaxKxH0/img.png)
문제 https://programmers.co.kr/learn/courses/30/lessons/92334 내 코드 def solution(id_list, report, k): # 받을 이메일 개수 answer = {id: 0 for id in id_list} # key = 신고 당함, value : 신고함 r = {id: [] for id in id_list} # 리스트 내 중복되는 값 무시하기 위해서 report = list(set(report)) for i in range(len(report)): user, warn = report[i].split() r[warn].append(user) for item, value in r.items(): if len(value) >= k: for key in v..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bwqRjM/btrxjoB340y/6kshTEV6Mcchoakq38N9EK/img.png)
문제 https://programmers.co.kr/learn/courses/30/lessons/64061 내 코드 def solution(board, moves): answer = 0 stack = [] for i in range(len(moves)): col = moves[i] - 1 for j in range(len(board)): if board[j][col] != 0: out = board[j][col] board[j][col] = 0 stack.append(out) if len(stack) >= 2: if stack[-1] == stack[-2]: stack.pop() stack.pop() answer += 2 break return answer 다른 사람 풀이 def solution(boar..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/9Ad89/btrw2NPeWH5/imZDVLnBJ17jjHVjdnEPT1/img.png)
문제 https://programmers.co.kr/learn/courses/30/lessons/67256 내 코드 def solution(numbers, hand): answer = '' lhand = 10 rhand = 11 # index == number로 좌표 만들기 points = [(3, 1), (0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2), (3, 0), (3, 2)] for i in numbers: if i in [1, 4, 7]: answer += "L" lhand = i elif i in [3, 6, 9]: answer += "R" rhand = i # 2580 나온 경우 else: ldist = abs(p..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/47u6p/btrwXzRsFiF/W3g59CZaZrpt46z2NEGPOK/img.png)
문제 https://programmers.co.kr/learn/courses/30/lessons/81301 내 코드 def solution(s): dict = {"zero": 0, "one": 1, "two": 2, "three": 3, "four": 4, "five": 5, "six": 6, "seven": 7, "eight": 8, "nine": 9} answer = "" temp = "" arr = list(s) for i in range(len(arr)): if arr[i].isdigit(): answer += arr[i] temp = "" else: temp += arr[i] if temp in dict: answer += str(dict[temp]) temp = "" return int(ans..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cRpuLO/btrvBkVUlRK/muztwEFVISmsg4DKn7zQD1/img.png)
문제 - 콜라츠 추측 https://programmers.co.kr/learn/courses/30/lessons/12943 내 코드 def solution(num): count = 0 while count 0: t = c % d c, d = d, t answer = [c, int(a*b/c)] return answer 해결 방법 나는 math 모듈에서 gcd()함수를 가져와서 사용했다.(최대공약수 찾아주는 함수) lcm()은 gcd()만 사용하면 금방 만들 수 있어서 쉽게 최소공배수까지 찾을 수 있었다. 다른 사람의 풀이를 보니 유클리드 호제법을 사용해서 풀었다고 하길래 공부해보았다! https://hihellosuah.tistory.com/74 [Algorithm]유클리드 호제법 - 두 수의 최대공약수..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bwL2Nl/btrYvmyBBez/klktwoN3kYF1TKOIPGER9K/img.png)
유클리드 호제법이 뭘까? 두 수의 최대공약수를 구하는 알고리즘이다. 💡 호제법 : 두 수가 서로 상대 수를 나눠서 원하는 수를 얻는 알고리즘 두 양의 정수 a, b (a>b)에 대해서 r = a % b (r은 a를 b로 나눈 나머지) 이라고 하면, a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 반복적으로, rr = b % r 이라고 하면, rr, rrr, ...이 0이 될 때까지 이 과정을 반복한다. rr이 0이면 a, b의 최대 공약수는 r이 된다. 유클리드 호제법을 예시를 통해서 보자! 📌 2058과 1071의 최대공약수 구하기 먼저, 큰 수(2058)를 작은 수(1071)로 나눈다. 2058 % 1071 = 987 나머지(987)가 0이 아니기 때문에, 1071을 987로 나누고 이 과정을 ..