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

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 분 · 배준수

완성한 줄 알았던 것을 진짜 완성하기

Today I Learned 날짜 2023년 12월 21일 목요일 내용 아오 하루종일 되는게 하나도 없다 그냥 또 데모 로그인 테스트서버 까지 확인한 후 실서버로 배포했다. 그런데 실서버에서 또 작동이 안된다… 로딩페이지에서 넘어가지 않는 상황이었다. 콘솔창을 확인해보니 계정 정보는 가져왔지만 그와 연관된 shop을 가져오지 않고 있었다. 해당 계정의 shop이 하나도 없다고 뜨는 상황. 2가지 가설을 세웠다. 설정한 계정의 계정 정보와 shop의 relationship이 DB에서 깨졌다. 실서버에서만 되지 않는 것과 관련하여 로직에 문제가 있다. 1번을 증명하는 방법은, 데모가 아닌 버전으로 로그인 해보면 된다. shop을 못가져오면 당연히 로그인도 안될테니까. 하지만 문제없이 잘 됐다. ...

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

파이썬 알고리즘 : 약수의 합

2023년 12월 21일 알고리즘 문제풀이 문제 약수의 합 난이도 Lv.1 코드 1 2 3 4 5 6 7 8 def solution(n): answer = 0 for i in range(1,int(n**(0.5))+1): if not n%i: answer += (i+n//i) if i == n//i: answer -= i return answer 공약수는 대칭이기 때문에 절반만 반복해주었다. 단 제곱수는 똑같은 수가 2번 더해지니 해당 부분만 뺴주었다. ...

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

데모페이지를 완성했다

Today I Learned 날짜 2023년 12월 20일 수요일 내용 데모 관련 Task 끝 어제 발견했던대로, DB에 commit이 일어나면 object가 refresh되었다. Loading Relationships In the last step, we called [Session.commit()](https://docs.sqlalchemy.org/en/14/orm/session_api.html#sqlalchemy.orm.Session.commit) which emitted a COMMIT for the transaction, and then per [Session.commit.expire_on_commit](https://docs.sqlalchemy.org/en/14/orm/session_api.html#sqlalchemy.orm.Session.commit.params.expire_on_commit) expired all objects so that they refresh for the next transaction. SQLAlchemy docs에서 찾은 내용이다. db에 commit하면 현재 session의 object들이 expired되고, object를 새로 로드해야 한다. 로그인할 때, object로 계정 정보로 DB에서 관련된 shop들을 가져오는데, 데모 로그인떄는 데모 스토어로 사용할 shop만 가져오도록 로직을 작성했다. 이 object가 동기화되면서 내가 선택한 shop이 무용지물 되버린건데.. 내가 몰랐던 SQLAlchemy의 기능인 것 같다. ...

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

SQL은 어려워

Today I Learned 날짜 2023년 12월 19일 화요일 내용 너무 힘들다. 흑흑 SQL 데모 로그인은 로그인의 로직을 이용해 만들었다. 로그인 함수가 호출되면, 해당 계정 정보가 관계를 갖고 있는 shop들을 불러와 shops 라는 배열에 담는다. 데모 로그인 때는, 가져온 후 데모로 설정한 shop_id와 일치하는 것만 남기도록 처리하였다. 이 과정이 DB에 영향을 끼치지 않도록 하기 위해, DB에 최근 접근 시간을 업데이트하고 commit하는 이후에 해당 로직을 추가하였다. shop들을 가져와 배열에 담는 joinedload에 특정한 조건을 추가하는 코드를 작성해야 했다. 사실 이 부분에서도 많이 헷갈렸는데, joinedload가 일반 join과 다른 점은 eager loading이라느 것이다. 간단히 말하자면 lazy-loading은 레코드를 조회할 때 연관관계가 있는 데이터들의 조회를 필요한 순간까지 미루는 것이고 eager-loading은 레코드를 조회할 때 연관이 있으면 다 가져와놓는 것이다. 지금 고민하는 부분과는 다른 이야기이니 차치하고, join과는 언제 연관된 데이터를 갖고 오느냐만 다르다는 의미이다. ...

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

파이썬 알고리즘 : 바탕화면 정리

2023년 12월 19일 알고리즘 문제풀이 문제 숫자 블록 난이도 Lv.2 코드 첫 생각 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 def solution(begin, end): answer = [] for n in range(begin,end+1): if n == 1: answer.append(0) elif not n%2: answer.append(n//2) else: for i in range(3,n//2): if not n%i: answer.append(n//i) print(n,n//i) break else: answer.append(1) return answer 최대공약수와 관련된 문제라고 생각했다. 최초 0으로 설정되있는 각 숫자는 1부터 하나씩 업데이트되겠지만, 마지막으로 업데이트될 때는 최대공약수로 될 것이다. 따라서 짝수는 절반값으로 된다. 2는 1, 4는 2, 6은 3, 8은 4 가 그 예시이다. 문제는 홀수였는데.. 홀수는 2로 나눠질 수 없는 것은 확실하니 3부터 1씩 커지면서 나누어주었다. 나누어 떨이질때, 그 몫이 최대 공약수이다. 하지만 이 경우가 자기 자신 뿐이라면 그때는 소수이므로 1로 설정해줬다. ...

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

벌거벗은 세계사 사건편

벌거벗은 세계사 사건편 지은이: tvn <벌거벗은 세계사> 제작팀 지음 출판사: 교보문고 감상 구체적이고 자세한 사건과 인물에 대한 이야기보단, 큰 흐름에서 세계사가 어떻게 흘러갔는가를 이야기 한다. 고대 그리스 신화와 관련된 이야기부터, 삼국지 속 제갈량, 흑사병, 청일전쟁과 러일전쟁, 세계대전과 걸프전까지 다루었다. 이 책을 통해 남들이 모르는 세계사의 깊숙한 면을 알 수 있기 보다는, 흔히 들어본 역사적 사건들이 왜 일어났고 어떻게 전개되었는지 알 수 있다. 개인적으론, 침착맨 삼국지로 삼국지를 입문해버리는 바람에 삼국지연의와 실제 정사의 차이에 대한 파트가 제일 재밌었다.. ...

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