Python 202

[Python] 나누어 떨어지는 숫자 배열

def solution(arr, divisor): answer = [] for i in arr : if (i % divisor) == 0 : answer.append(i) if answer == [] : answer.append(-1) return sorted(answer) arr에서 하나씩 받아와 divisor로 나누어 떨어지면 answer 리스트에 추가해주는 형식. 그러나 answer이 비어있다면 -1을 추가해 반환하는 형식이다. 다른 분들의 풀이 ! def solution(arr, divisor): return sorted([n for n in arr if n%divisor == 0]) or [-1] return에서 or을 사용할 수 있다 ! ! 앞의 식이 거짓이면 or 뒤의 식을 반환한다.([-1..

[Python] K번째수

def solution(array, commands): answer = [] for i, j, k in commands : new_array = sorted(array[i-1:j]) k_num = new_array[k-1] answer.append(k_num) return answer 풀이 1. 정렬하기 위해 sorted를 써주었다. 2. 인덱스는 0부터 시작하기때문에 i와 k를 사용할 때 각각 -1을 해주어야한다. def solution(array, commands): return list(map(lambda x:sorted(array[x[0]-1:x[1]])[x[2]-1], commands)) map과 lambda식을 사용하면 한줄로 표현할 수 있다.

[Python] 같은 숫자는 싫어

def solution(arr): answer = [] for i, j in enumerate(arr) : if i != 0 : if j == answer[-1] : continue else : answer.append(j) else : answer.append(j) return answer 풀이 1. enumerate를 사용하여 리스트의 인덱스와 값을 각각 i와 j에 반복하여 받도록 한다 2. i가 1이상일 경우에만 비교할 수 있으므로 if 문을 사용해서 i가 0이 아닌 경우, 1) arr에서 받은 값 j와 그 전에 리스트에 넣은 값(이전 j값)을 비교하여 같으면 반복문 처음으로 돌아간다. 2) 다를 경우에는 리스트에 추가해준다. 3. i가 0일 경우에는, 무조건 리스트에 넣는 경우이므로 리스트에 넣어..

[Python] 2016년

def solution(a, b): days = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"] month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] date = (sum(month[:a-1]) + (b-1)) % 7 answer = days[date] return answer 풀이 1. 2016년 1월 1일 금요일 부터 시작이므로 요일 리스트에 금요일부터 넣어주었다. 2. 각 월의 일들을 리스트에 넣어주었다. 3. 입력받은 월(a)의 전 날들과 입력받은 일(b)을 더해준다. (sum(month[:a-1]) + (b-1) ) ( b-1을 해주는 이유는 리스트 인덱스가 0부터 시작하기 때문이다. 예) 1월 1일이 금요..

[Python] 신규 아이디 추천

import re def solution(new_id): # 1. 소문자로 변환 new_id = new_id.lower() # 2. 특수문자 제거 new_id = re.sub('[^a-z0-9\.\_\-]','',new_id) # 3. 마침표가 연속인 부분 치환 new_id = re.sub('\.\.+', '.', new_id) # 4. 마침표가 처음이나 끝에 위치하면 제거 new_id = re.sub('^\.|\.$', '', new_id) # 5. 빈 문자열이면 "a" 대입 if new_id == "" : new_id = "a" # 6. 15자 이하로 맞추기 if len(new_id) > 15 : new_id = re.sub('\.$', '', new_id[0:15]) # 7. 2자 이하이면 마지막 ..

[Python] 크레인 인형 뽑기 게임

def solution(board, moves): bucket = [] answer = 0 for i in range(len(moves)) : # 맨 윗줄이 0 이면 그 밑의 줄로 이동 for j in range(len(board)) : item = board[j][moves[i]-1] if item != 0 : break # 한줄 전체가 비었을 경우 맨 처음으로 돌아감 if item == 0 : continue bucket.append(item) board[j][moves[i]-1] = 0 if len(bucket) >= 2 and item == bucket[-2] : del bucket[-2:] answer += 2 return answer 풀이 for i in range(len(moves)) : #..

[Python] 두 개 뽑아서 더하기

def solution(numbers): answer = [] for i in range(len(numbers)-1) : for j in range(i+1, len(numbers)) : answer.append(numbers[i] + numbers[j]) return sorted(list(set(answer))) 처음에는 range를 쓰지 않고 numbers에서 바로 뽑아 쓰면서 i는 remove로 리스트에서 빼줬는데, 마지막 위치 숫자들끼리 더해지면서 문제가 틀렸다. 그래서 이 문제를 어떻게 해결할까 하다 range를 사용하는 방법을 생각하게 되었다.