파이썬 알고리즘 : 파일명 정렬

2024년 3월 12일 알고리즘 문제풀이 문제 파일명 정렬 난이도 Lv.2 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 def seperate(name): # head와 number를 분리하는 함수 idx = 0 head = "" number = "" # 처음 숫자가 나오기 전까지가 head while True: if name[idx] in "0123456789": head = name[:idx] break idx += 1 # idx는 number의 첫글자로 유지된 상태에서 시작 # 숫자가 나오면 계속 number로 추가 # 5자리가 넘어가거나, tail이 존재하지 않으면 종료 while len(number) < 5 and idx < len(name): if name[idx] in "0123456789": number += name[idx] idx += 1 else: break # head는 소문자로 변환 return head.lower(), number def solution(files): # 정답을 담을 배열 answer = [] # 각기 다른 head만 담을 배열 # 첫번째 정렬을 위해 사용 head_order = [] # 동일한 head를 가진 number들을 담을 배열 # 두번째 정렬을 위해 사용 # key는 head로, value는 list로 만들 것. # 원소는 [number, index] 형태로 만들어 number로 정렬한다. # index는 files 내에서 index를 뜻하며 원래 파일 이름을 찾을 수 있도록 한다. arr = dict() for i in range(len(files)): file = files[i] # 파일명에서 head, number 추출 head, number = seperate(file) # 이번 파일의 head가 이전에 나온 적 있는 head라면? if arr.get(head): # dict에서 head가 key인 value를 찾아 추가 arr[head].append([int(number), i]) else: # 처음 나온 head라면 dict에 추가 arr[head] = [[int(number), i]] # 새로운 head 이므로 head 배열에도 추가 head_order.append(head) # head 배열을 사전순으로 정렬 head_order.sort() # 가장 먼저 나와야할 head 선택 for head in head_order: # 선택된 것을 head로 가지는 number 들을 정렬 arr[head].sort() for num, idx in arr[head]: # 순서대로 원래 파일 이름을 정답 배열에 추가 answer.append(files[idx]) return answer

2024년 3월 12일 · 2 분 · 배준수

router 구현 순서

Today I Learend 날짜 2024년 3월 11일 월요일 내용 우선 기본적인 구현은 수월하게 진행중! router 정의 순서 위젯을 렌더링하는 요청을 받을 router를 list-designer/render 엔드포인트로 만들었다. 오류가 발생했는데, int여야하는 widget_id의 타입이 올바르지 않다는 다음과 같은 내용이었다. 1 2 3 4 5 6 7 8 { "detail": [ { "loc": [ "path", "widget_id" ], "msg": "value is not a valid integer", "type": "type_error.integer" } ] } 내가 만든 router는 widget_id를 전혀 사용하지 않는데.. 기존에 있는 코드에 문제가 있다고 생각해서 들여다봤지만 아무 문제 없었다. 애초에 문제 있는게 test 서버로 올라올 리도 없고, 다른 곳의 router가 실행도 안됐는데 왜 영향을 끼친다는 건지 이해가 되지 않았다. ...

2024년 3월 11일 · 2 분 · 배준수

파이썬 알고리즘 : 예상 대진표

2024년 3월 11일 알고리즘 문제풀이 문제 예상 대진표 난이도 Lv.2 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 def solution(n,a,b): answer = 0 # 다음 라운드로 진출하여 새로운 번호를 부여하는 함수 def victory(num): if num%2: tmp = num//2 + 1 else: tmp = num//2 return tmp # 만났는지 확인하는 함수 def check(p,q): if abs(p-q) == 1 and p//2 != q//2: return True else: return False cnt = 1 while True: if check(a,b): return cnt a = victory(a) b = victory(b) cnt += 1 return cnt 두 사람의 번호가 1 차이가 나지만 2로 나누었을 때 몫이 달라야 한다. 한 사람의 번호가 3일 때, 1 차이가 나는 수는 2와 4지만, 실제로 만나는건 몫이 다른 4이기 때문이다 ...

2024년 3월 11일 · 1 분 · 배준수

위젯 렌더링 클래스 만들기

Today I Learend 날짜 2024년 3월 7일 목요일 날짜 2024년 3월 8일 금요일 내용 위젯 렌더링 만들다가 골이 빠질 것 같다. 기존에 위젯을 렌더링하는 클래스가 있지만 전혀 다른 모양새라 새로 만드는게 맞다고 생각했다. 똑같은 엔드포인트에서 경우에 따라 완성된 위젯을 렌더링하여 응답하거나 받은 값을 적용하여 렌더링해주어야 한다. 처음에는, 위젯이 가지고 있는 고유 코드가 param에 포함되는 지를 기준으로 생각했다. 그런데 이미 생성된 위젯은 기본 디자인 형태를 갖추고 고유 코드도 가진다. 프론트에서 위젯 스키마를 보낼 떄, 모두 데이터가 갖춰진 채로 보낼 것이다. 차라리 디자인 값이 포함 되어있는지 여부를 따지는게 더 정확할 것 같다. 어제도 말했듯, Shopify에서 스토어에 렌더링을 요청할때는 디자인 값을 보내지 않을테니… 위젯 목록을 위한 기본적인 CRUD가 구현되어 있으니 여기서 사용되는 schema를 이용해서 그 형태로 오면 미리보기로, 아니면 shopify쪽 요청으로 처리해야 하나..? ...

2024년 3월 8일 · 1 분 · 배준수

파이썬 알고리즘 : 완주하지 못한 선수

2024년 3월 8일 알고리즘 문제풀이 문제 완주하지 못한 선수 난이도 Lv.1 코드 1 2 3 4 5 6 7 8 9 10 11 12 def solution(participant, completion): arr = {} for runner in completion: if runner not in arr: arr[runner] = 1 else: arr[runner] += 1 for player in participant: if arr.get(player): arr[player] -= 1 else: return player n-1개의 참가자 목록을 길이가 n인 리스트에서 탐색할 때 최악의 경우 n*(n-1), O(n**2)의 수행시간이 걸린다. 길이가 n인 리스트에서 1개를 탐색할 때 최악의 경우 n만큼 반복해야 하기 때문. 하지만 dictionary에선 상수의 값이라 O(1)이 n번 소요된다. dictionary에서 in 연산자는 해당 key가 존재하는지 찾아주고 get은 value 값을 반환해준다. ...

2024년 3월 8일 · 1 분 · 배준수

데이터 처리 함수 구현

Today I Learend 날짜 2024년 3월 7일 목요일 내용 정신 없는 하루지만 그래도 큰 거 하나 끝냈다.. 데이터 처리 구현 위젯에 담길 데이터를 처리하는 로직을 꼭 완성하려 했고, 거의(?) 성공했다. 총 6가지 데이터를 얻었다. Flow 이전 TIL에서 언급했듯, 우리 서비스에서 위젯은 리뷰 서버에서 렌더링 해준다. 고객이 스토어에 접속 ⇒ shopify 쪽에 위젯 요청 ⇒ shopify가 우리 서버로 요청을 리다이렉트 ⇒ 저장해놓은 위젯을 응답 ⇒ shopify가 응답을 리다이렉트 의 과정이다. 따라서 이번 위젯들도 리뷰서버에서 처리되어야 한다. 필요한 데이터들 중 shop 서버에서 가져와야 할 것들이 있다. 고객이 상품을 주문하면 웹훅으로 우리 shop 서버의 order 테이블 등에 관련 데이터가 저장된다. 따라서 리뷰 서버에서 샵 서버로 일부 데이터들을 요청하도록 구조를 만들어야 했다. ...

2024년 3월 7일 · 3 분 · 배준수

파이썬 알고리즘 : 두 정수 사이의 합

2024년 3월 7일 알고리즘 문제풀이 문제 두 정수 사이의 합 난이도 Lv.1 코드 1 2 3 4 5 6 7 def solution(a, b): high = max(a,b) low = min(a,b) answer = 0 for i in range(low,high+1): answer += i return answer

2024년 3월 7일 · 1 분 · 배준수

이슈 처리

Today I Learend 날짜 2024년 3월 6일 수요일 내용 하루종일 문제를 해결하려고 별 방법을 다 써봤지만 잘 안된다. 리뷰 서버에서 샵 서버로 보내는 데이터 요청이 작동하지 않는다. 이 부분이 해결되지 않으면 답도 없으니 내일도 계속 고민해야 한다. 처리할 이슈가 생겨서 집단 지성을 이루었는데, 여전히 모르겠다. 실서버에서만 리뷰를 import하여 성공했음을 띄우는 기능이 작동하지 않는다. 더 정확히 말하면, import는 제대로 되고 반영도 되는데 프론트단에서는 무반응으로 나타난다. 창을 닫고 리뷰 페이지로 가보면 import도 잘 되고 import log도 잘 생성되었는데 화면에 반영이 안된다. 프론트 상 문제는 아닌 것 같은데.. 로컬이나 테스트 서버는 잘 되는데도 실서버에서만 안되니 난감하다. 코드도 똑같은데… 어디서부터 봐야할지 참.. ...

2024년 3월 6일 · 1 분 · 배준수

라프 코스터의 재미이론

라프 코스터의 재미이론 지은이: 라프 코스터 지음 출판사: 와이즈베리 감상 개발자가 되기로 마음 먹은 떄부터, 언젠가 꼭 게임을 개발하겠다는 꿈을 갖고 있다. 굳이 직업일 필요는 없다고 생각한다. 오히려 직업이 아니게 되면 훨씬 더 자유롭게 내 꿈을 펼칠 수 있지 않을까? 중요한 건 반드시 하겠다는 것이다. 페이커의 독후감 리스트에서 단번에 내 눈에 들어온 책이였다. 어떤 게임에서, 어떤 것에서 재미를 느끼는 것인가? 내가 워낙 쉽게 게임을 질려하는 타입이라 정말 수 백가지의 게임을 해봤다. 남들은 들어보지도 못했을 것 까지도. 반면 남들이 다 하는 것, 게임을 좋아하는 사람이라면 누구나 해봤을 법한(혹은 해야만 하는) 게임을 안한 경우도 있다. 나름대로 까탈스러운 구석이 있다 보니.. 이 책을 읽으면 내가 어떤 잣대를 가지고 있는지, 그게 어떤 의미인지를 알 수 있지 않을까 기대 했다. ...

2024년 3월 5일 · 6 분 · 배준수

망가진 로컬환경 고치기

Today I Learned 날짜 2024년 3월 5일 화요일 내용 스프린트 2일차 데이터베이스 모델링을 내가 처리하지 않았다. 하지만 이전에 이미 수 차례 회의를 통해 어떻게 작성할지 계획했기 때문에 이를 바탕으로 코드를 작성할 수 있었다. 이것저것 빠진 부분도 조금 있었지만 열심히 짜놓은 덕분에, 우선 기능 함수부터 편하게 구현할 수 있었다. 내일 테스트서버에 적용될 예정이니 pull 받아서 마이그레이션 하고 나면 본격적으로 함수를 테스트하고 완성할 수 있을 것 같다. 생각보다 너무 수월하게 잘되서 불안한데.. ...

2024년 3월 5일 · 2 분 · 배준수