프로그래머스 - 추억 점수

추억 점수 문제 바로가기 나의 풀이 def solution(name, yearning, photo): answer = [] names = {} for i in range(len(name)): names[name[i]] = yearning[i] for p in photo: temp = 0 for i in p: if i in name: temp += names[i] answer.append(temp) return answer CODE REVIEW 주어진 2개의 array를 {key:value} 쌍으로 바꾸어 해결하는 문제. dictionary로 array를 변환하면 key가 주어졌을 때 탐색이 빨라 n명의 이름이 많아져도 커버 가능해진다.

2023-5-29 · 1 min · 67 words · Junha

프로그래머스 - 카드 뭉치

카드 뭉치 문제 바로가기 나의 풀이 def solution(cards1, cards2, goal): answer = "Yes" while goal: c = goal.pop(0) if cards1[0] == c: cards1.pop(0) cards1.append('') elif cards2[0] == c: cards2.pop(0) cards2.append('') else: return "No" return answer CODE REVIEW 큐를 이용하면 생각보다 간단하게 해결 가능한 문제였다. goal의 head부터 하나하나씩 cards1와 cards2의 head와 동일한지 확인해주고, 둘 다 동일하지 않다면 “No"를 return하면 되었다. TIP! pop(0)해준 뒤에 빈 문자열 ''을 append해주어야 indexError가 발생하지 않는다.

2023-5-29 · 1 min · 69 words · Junha

백준 1874번 - 스택 수열

백준 1874번 바로가기 나의 풀이 n = int(input()) stack = [] arr = [] ans = [] i = 1 for _ in range(n): num = int(input()) arr = [num] + arr while i <= num: stack.append(i) ans.append('+') i += 1 if stack[-1] == num: stack.pop() arr.pop() ans.append('-') if stack[::-1] == arr: print(*ans, sep="\n") for _ in range(len(stack)): print('-') else: print("NO") CODE REVIEW 예제를 이해하는 것부터 쉽지 않은 문제였다. 1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써,부분이 모호해서 헷갈렸는데 차라리 1부터 n까지의 수를 차례대로 넣고 빼는 과정을 반복하면서 표현이 실제 실행 방식에 가깝지 않나 싶긴 하다. 이것도 애매하긴 마찬가지지만… input을 받는 arr, 주어진 수열을 stack list에 저장해서 비교해가며 문제를 해결했다. n까지 넣은 뒤에는 남은 숫자들을 비교했을 때 stack[::-1] == arr만족하지 않으면 NO, 만족한다면 저장해둔+- 결과를 출력해주면 된다.

2023-5-28 · 1 min · 126 words · Junha

백준 2805번 - 나무 자르기

백준 2805번 바로가기 첫 번째 풀이 # 입력 n, m = map(int,input().split()) tree = list(map(int,input().split())) h = max(tree) current = 0 # 함수 def relu(x): if x>0: return x else: return 0 # 처리 while current < m: temp = 0 for t in tree: temp += relu(t-h) current = temp h -= 1 print(h+1) 두 번째 풀이 # 입력 n, m = map(int,input().split()) tree = list(map(int,input().split())) start,end = 1,sum(tree) # 함수 def relu(x): if x>0: return x else: return 0 # 처리 while start <= end: mid = (start + end) // 2 temp = 0 for t in tree: temp += relu(t-mid) if temp >= m: start = mid + 1 else: end = mid-1 print(end) CODE REVIEW 첫 번쨰 풀이에서는 브루트포스로 h를 max(tree)에서 1씩 내려가며 확인하는 방식을 취했다. 시간초과 에러로 탈락… 이분탐색 알고리즘을 활용해보자. 두 번째 풀이에서는 이분탐색을 활용해서 해결했다. h의 범위를 start,end로 잡고 start=end될 때 까지 반복했다. 자른 나무의 길이를 어떻게 구현할까 고민하다가, 머신러닝에서 activation function 중 하나인 relu를 가지고 구현했다. 근데 메모리 아끼기 위해서는 relu()함수 대신 if t>h: temp+=t-mid로 구현하는게 나을 것 같긴 하다.

2023-5-28 · 1 min · 179 words · Junha

네이버 MYBOX와 한컴오피스 Web 편집

컴퓨터에 쌓여가는 문서들을 저장/보관하는 방법에는 여러 가지가 있는데, 대표적으로 Google Drive, Dropbox, Onedrive가 있다. 그동안 동기화가 편리하고 범용적으로 사용 가능한 Google Drive을 활용해왔는데, word excel ppt 문서의 경우 기본적으로 구글에서 제공하는 온라인 에디터를 이용해서 편리하게 이용할 수 있다. 특히, 공유 기능이 탁월한데 큰 딜레이 없이 동시에 한 문서를 수정할 수 있다는 점이 아주 매력적이어서 주로 사용하게 되었다. 하지만 우리나라에서 주로 사용하는 한글 hwp 문서의 경우 온라인 상에서 수정하지 못하고 다운받은 뒤 수정 후 다시 업로드하는 방법을 사용해야했는데, 간단한 수정할 때에 매우 불편하게 느껴졌다. 만일 기존의 컴퓨터가 아닌 환경에서 문서를 이용하는데, 그 pc에 한글과컴퓨터가 깔려있지 않다면 실행시킬 수 없는 초유의 사태가 발생하기도 한다. ...

2023-5-27 · 1 min · 194 words · Junha