파이썬 알고리즘 : 신규 아이디 추천

2023년 12월 29일 알고리즘 문제풀이 문제 신규 아이디 추천 난이도 Lv.1 코드 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 def solution(new_id): arr = ['1','2','3','4','5','6','7','8','9','0','-','_','.'] # 1단계 new_id = new_id.lower() # 2단계 tmp = [] for i in new_id: if i.islower() == True or i in arr: tmp.append(i) new_id = ''.join(tmp) # 3단계 if len(new_id) >1: tmp = [] for i in range(len(new_id)-1): if new_id[i] == '.' and new_id[i+1] == '.': continue tmp.append(new_id[i]) tmp.append(new_id[-1]) new_id = ''.join(tmp) # 4단계 if new_id: if new_id[0] == '.': if len(new_id) == 1: new_id = '' else: new_id = new_id[1:] # 4단계 if new_id: if new_id[-1] == '.': if len(new_id) == 1: new_id = '' else: new_id = new_id[:len(new_id)-1] # 5단계 if new_id == '': new_id = 'a' # 6단계 if len(new_id) >= 16: new_id = new_id[:15] # 6단계 if new_id[-1] == '.': new_id = new_id[:len(new_id)-1] # 7단계 if len(new_id) <= 2: while len(new_id) < 3: new_id = new_id + new_id[-1] return new_id 문제에 주어진 대로, 순차적으로 해결하면 큰 어려움은 없는 문제였다. 다만 중간중간, 문자열이 존재하지 않게 되는 상황이 발생할 수 있기 때문에 이를 따로 처리하는 로직이 필요하다. 시간 많이 잡아먹는 문제라 좋은 연습이 됐다. ...

2023년 12월 29일 · 2 분 · 배준수

별개의 DB 관계 파악

Today I Learned 날짜 2023년 12월 28일 목요일 내용 매 주, shop의 review에 관해 발생한 변화들을 담은 메일을 발송해야 한다. 어제 가진 의문들에 대해 집중적으로 고민한 덕에 많이 진행됐다. 현재 발송하는 shop의 이름 각 메일에는 수신하는 shop에 대한 정보가 담겨야 한다. 그렇다면 그 샵의 정보를 통해 조회하여 담아야 하는데 어떻게 알 수 있을까에 대해 고민됐다. 조금만 고민해보니 정말 쓸데 없는 생각이었다. 모든 shop에 보내야하니 그냥 각 shop에 대해 필요한 정보를 다 가져와야 했다. ...

2023년 12월 28일 · 3 분 · 배준수

파이썬 알고리즘 : 문자열 내 p와 y의 갯수

2023년 12월 28일 알고리즘 문제풀이 문제 문자열 내 p와 y의 개수 난이도 Lv.1 코드 1 2 3 4 def solution(s): a = s.count('p') + s.count('P') b = s.count('y') + s.count('Y') return a == b 이 문제에선 p 와 y만 포함됐지만, 대문자나 소문자 자체를 어떻게 셀 지 궁금해져서 찾아보니 islower() 와 isupper() 를 사용하면 boolean 값으로 반환된다고 한다.

2023년 12월 28일 · 1 분 · 배준수

2023년 회고록

2023년 회고록 2023년이 일주일 남았다. 크리스마스 분위기가 특별히 체감되지 않기도 하고.. 내게 뜻 깊은 한해라 되돌아보며 회고하는 시간을 가졌다. 꽤 오래 WIL을 쓰면서 회고를 반복해왔고, 근래에는 TIL을 쓰고 있다. 하루를 얼마나 바쁘게, 의미있게 보냈는지를 적나라하게 볼 수 있다. 그리고 시간의 흐름을 지나고나서보면 꽤나 다르게 보인다. 정확히는, 과거의 내가 꽤나 현명하지 못했다는 생각이 많이 든다. 예를 들어, 1번부터 5번까지의 선택지를 두고 치열하게 고민한다. 내 딴에는 열심히 고민했고 최선의 결론을 내렸다고 해도 나중에는 이해가 잘 안된다. “왜 정답인 4번을 냅두고 3번을 생각했을까?”, 혹은 “왜 6번, 7번 선택지는 몰랐을까?”. 심지어는 “그 쓸데없는 걸 왜 고민했을까?“까지도. 나를 되돌아본다는 것은 분명 가치있는 일이다. 꼭 더 나은 모습을 도출해내지 못하더라도 스스로를 더 잘 알게 되는 것만으로도 말이다. ...

2023년 12월 27일 · 5 분 · 배준수

Amazon ECS 알아보기

Today I Learned 날짜 2023년 12월 27일 수요일 내용 Verification Email은 테스트서버에서도 이상이 없었다. 코드가 힘들기 보단 이해가 힘든 Task였음. Review Report Email 주 1회, 한 주간 리뷰의 추가 상황에 대해 메일을 보내줘야 한다. 가장 우선 파악해야할 것은 세 가지였다. 어떻게 정기적으로 메일을 보낼 것인가? 메일 형식은 어디에 어떻게 설정할 것인가? 메일에 데이터를 어떻게 담을 것인가? 우선 반복된 동작은 cron과 cronjob에서 처리한 다는 것은 알고 있었다. 문제는 이 코드를 누가 언제 실행하는지 였는데… 결국 ECS였다. 이에 관한 설명인 밑에서 하고, ECS에서는 특정 이벤트나 시간을 기준으로 Task를 계획할 수 있다. ...

2023년 12월 27일 · 2 분 · 배준수

Email 관련 Task 완료!

Today I Learned 날짜 2023년 12월 26일 내용 지난 주에 정리했던 대로 로직을 완성했다. 기존의 messaging_log를 처리하는 스크립트는 messaging의 비활성화 여부를 체크하지 않기 떄문에, 스크립트를 새로 생성했다. 여기서는 messaging 설정에 따라 messaging_log의 sending_status를 출력하도록 했다. ON 일땐 보내는 로직이 발생하지만 필요한 param이 모두 입력되지 않았기 떄문에 발송 오류가 발생하여 Unable로 설정되야 하고, OFF 일 때는 보내선 안되므로 CHANNEL_OFF 로 설정되야 한다. 로컬에선 문제 없이 작동한다. 회고 노로바이러스 떄문에 너무 힘들다. ...

2023년 12월 26일 · 1 분 · 배준수

파이썬 알고리즘 : 줄 서는 방법

2023년 12월 26일 알고리즘 문제풀이 문제 줄 서는 방법 난이도 Lv.2 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import math def solution(n, k): answer = [] arr = list(range(1,n+1)) while n>0: tmp = math.factorial(n-1) a = k//tmp k = k%tmp if k: answer.append(arr[a]) arr.pop(a) else: answer.append(arr[a-1]) arr.pop(a-1) n -= 1 return answer 순열에 정의를 알면 접근방식 자체는 그리 어렵지 않지만, 코드로 구현하는 게 꽤나 까다로웠다. 순열은 결국 앞에서부터 올 수 있는 경우의 수를 정해주고 곱하는 방식이다. 4명이 줄을 서는 방법은 4! = 4 x 3 x 2 x 1이다. 왜 이렇게 나오냐면, 맨 앞에 올 수 있는 후보는 4개 이고, 그 다음은 3개, 2개, 1개 이기 때문이다. ...

2023년 12월 26일 · 2 분 · 배준수

파이썬 알고리즘 : 최댓값과 최솟값

2023년 12월 25일 알고리즘 문제풀이 문제 최댓값과 최솟값 난이도 Lv.2 코드 1 2 3 4 5 def solution(s): answer = '' arr = list(map(int,s.split())) answer = str(min(arr)) + ' ' + str(max(arr)) return answer 문자를 공백을 기준으로 쪼개 숫자형으로 변환하여 배열에 저장하였다. 최댓값과 최솟값만 다시 문자열로 변환한 쉬운 문제.

2023년 12월 25일 · 1 분 · 배준수

좋은 마무리

Today I Learned 날짜 2023년 12월 22일 금요일 내용 어제 막혔던 부분이 술술 해결됐다. 좋은 기분으로 크리스마스를 보낼듯! 구글 SEO 오늘 아침와서 보니 Google Search Console이 우리 서비스의 robots.txt를 인지하기 시작했다. 시간이 답이였나보다. 해당 URL을 올바르게 크롤링할 수 있는지 검사할 수 있는데 Sitemap도 잘 인지하기 시작했다. 아직 sitemap.xml로 인지하는 건 아니고 그냥 크롤링 할 사이트로 인지하고 있긴한데.. 아마 사이트맵 등록도 시간이 조금 지나면 해결되지 않을까 싶다. 바로바로 피드백이 없으니 참 답답하다. 다음주까지 기다려보고 안되면 다시 건드려봐야겠다. ...

2023년 12월 22일 · 3 분 · 배준수

파이썬 알고리즘 : 성격 유형 검사

2023년 12월 22일 알고리즘 문제풀이 문제 성격 유형 검사 난이도 Lv.1 코드 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 def solution(survey, choices): answer = [] board = {'R':0, 'T':0, 'C':0, 'F':0, 'J':0, 'M':0, 'A':0, 'N':0} n = len(survey) for i in range(n): idx = survey[i] if choices[i] < 4: board[idx[0]] += abs(4-choices[i]) elif choices[i] >4: board[idx[1]] += (choices[i]-4) if board['R'] >= board['T']: answer.append('R') else: answer.append('T') if board['C'] >= board['F']: answer.append('C') else: answer.append('F') if board['J'] >= board['M']: answer.append('J') else: answer.append('M') if board['A'] >= board['N']: answer.append('A') else: answer.append('N') return ''.join(answer) 각 경우를 딕셔너리를 이용했다. 점수를 그대로 더해줘선 안되고 알맞게 변환해줘야 하는 부분이 조금은 신경써야할 부분. ...

2023년 12월 22일 · 1 분 · 배준수