본문 바로가기

파이썬

(70)
[ 프로그래머스 ] 124 나라의 숫자 def solution(n): answer = '' while n: if n%3: answer += str(n%3) n = n//3 else: answer += '4' n = n//3-1 answer = answer[::-1] return answer 으아 진법 개념 어렵다 역시 그래도 3진법 개념이라는게 빨리 들어와서 아이디어는 잡을 수 있었다. 여기서 체크할 것은 1. 문자열에 값 더할 때 str으로 변환해서 바로 더하는 것 2. if문에서 값이 1이면 true, 0이면 false처럼 바로 써도 되는 것. 3. 문자열 순서 뒤집기는 문자열[::-1]로 구현
[ 프로그래머스 ] 타켓 넘버 < 다시 풀기 > / 가져온 풀이 / def solution(numbers, target): answer = DFS(numbers, target, 0) return answer def DFS(numbers, target, depth): answer = 0 if depth == len(numbers): if sum(numbers) == target: return 1 else:return 0 else: answer += DFS(numbers, target, depth+1) numbers[depth] *= -1 answer += DFS(numbers, target, depth+1) return answer 너무 오랜만에 DFS/BFS문제를 풀려고 하니 머릿 속에 잘 안 들어왔습니다. 해서 다른 분 풀이를 이용해 공부를 하는 식..
[ 프로그래머스 ] 구명보트 / 제출 1 / def solution(people, limit): answer = 0 boat_weight = 0 people.sort() for person in people: if boat_weight + person
[ 프로그래머스 ] 오픈채팅방 / 제출 1 / def change(array, uid): return updated_array def solution(records): answer = [] name_dict = {} for record in records: record = record.split() if len(record) == 3: oper, uid, name = record else: # leave인 경우 oper, uid = record if oper == 'Enter': answer.append(uid+"님이 들어왔습니다.") if uid not in name_dict: name_dict[uid] = name elif uid in name_dict and name_dict[uid] != name: name_dict[uid] ..
[ 프로그래머스 ] 문자열 압축 / 제출 1 / def solution(s): answer = len(s) for i in range(1, len(s)+1): answ = '' before = '' before_cnt = 0 for step in range(0,len(s), i): if before == s[step:step+i]: before_cnt += 1 else: if before_cnt > 1: answ += str(before_cnt) answ += before before = s[step:step+i] before_cnt = 1 if before_cnt > 1: answ += str(before_cnt) answ += before answer = min(answer, len(answ)) return answer 채점 결과 ..
[ 프로그래머스 ] 큰 수 만들기 / 제출 1 / def solution(number, k): answer = '' i = 0 final_len = len(number) - k while k > 0 and i = number[i+1]: answer += number[i] else: number = answer + number[i+1:] answer = '' k -= 1 i = -1 i += 1 return number 채점 결과 정확성: 75.0 합계: 75.0 / 100.0 8, 10 시간 초과 12 실패 36분 소요. 흐으.. 풀 때도 인덱스를 약간 복잡하게 해서 푸는 느낌이어서 불안했는데 제출하니 역시 시간 초과에 실패도 뜨네요. 코드 문제점 찾고, 시간 초과 해결방안도 찾아..
[ 프로그래머스 ] 카펫 / 제출 1 / def solution(brown, yellow): answer = [] yel_x = yellow yel_y = 1 while yel_y
[ 프로그래머스 ] 소수 찾기 / 제출 1 / def isPrime(x): x = int(x) if x == 0 or x == 1: return False for i in range(2,x): if x%i == 0: return False return True def solution(numbers): answer = [] cand_num = '' for i in range(len(numbers)): cand_num = numbers[i] if isPrime(cand_num)and int(cand_num) not in answer: answer.append(int(cand_num)) for j in range(len(numbers)): if i != j: cand_num += numbers[j] if isPrime(cand_num)an..
[ 프로그래머스 ] 나누어 떨어지는 숫자 배열 / 제출 1 / def solution(arr, divisor): answer = [] for i in range(len(arr)): if arr[i] % divisor == 0: answer.append(arr[i]) if answer: return sorted(answer) else: return [-1] 채점 결과 정확성: 100.0 합계: 100.0 / 100.0 / 다른 분들 풀이 / 사실 다른 분들은 한 줄짜리 코드에 대해 되게 우와우와하십니다. 보다 보니 나는 개인적으로 눈에 잘 안 들어와서 내 취향은 아닌 것 같습니다.. 물론 계속 말하지만 할 줄 알면서 선택에 의해 안 하는 것과, 몰라서 못하는 것과는 차이가 있으니 한 줄로 구현하는 것도 익혀는 둬야 합니다. def solution(ar..
[ 프로그래머스 ] 가운데 글자 가져오기 / 제출 1 / def solution(s): if len(s) % 2 == 0: return s[len(s)//2-1:len(s)//2+1] else: return s[len(s)//2] 채점 결과 정확성: 100.0 합계: 100.0 / 100.0 아니.. 이 간단한 구현에서도 짝수일 때 착각해서 인덱스 범위를 실수해 다시 고쳐 제출했습니다. 이 인덱스 값에 대해서는 다른 분들이 되게 다양하게 접근하셨던데 재밌어서 많이 살펴봤습니다. 다양한 사고를 할 수 있으면 분명 다른 문제에서도 아이디어를 떠올리기 쉬울테니까요. / 다른 분들 코드 / def string_middle(str): return str[(len(str)-1)//2:len(str)//2+1] 저는 짝수일 경우, 홀수일 경우를 나눠서 했는..