테스트 코드 완성!

Today I Learned 날짜 2023년 11월 30일 목요일 내용 계속해서 테스트 코드를 고쳤고 2차로 완성했다. 화요일에 완성했다고 판단하여 PR을 올렸는데, 그떄 받은 코멘트를 피드백하여 수정했다. 여러 오류들을 수정해가는 과정을 정리하였다. 모든 경우를 순환 위젯을 생성하는 함수를 테스트해야 했다. 위젯의 종류와 설치 위치에 따라 다양한 경우의 수가 존재할 수 있는데, 기존에는 무작위로 하나를 골라 테스트하고 결과를 도출시켰다. 이것을 pytest.mark.parameterize를 이용해 모든 경우의 수를 검증하도록 수정하였다. 위젯 타입에 대한 클래스가 워낙 많았고 실제로는 다르게 처리되야 할 타입들도 존재하다보니 오류가 발생하였다. 따라서 어떤 타입들이 살짞 다른 로직을 거쳐야 하는지 파악하였다. 결정적으로, 검증 대상은 위젯 타입의 이름을 포함하는 html 파일이 존재 하는가를 기준으로 성공 여부를 판단하고 있었다. ...

2023년 11월 30일 · 2 분 · 배준수

수박 겉 핥는척 하기

Today I Learned 날짜 2023년 11월 29일 수요일 내용 테스트 코드를 수정하는데 같은 곳을 맴돌고 있다. 어떤 WidgetType 들이 에러릴 일으키고 있는데, 속성에 알맞은 값을 매칭시키지 못한 것이 원인인지, 아예 생성 시 제외시켜야 할지 로직을 파악 못하니 헤매고 있다. 회고 이거 해내면 기분 진짜 날라갈듯.

2023년 11월 29일 · 1 분 · 배준수

열심히 아무것도 못하기

Today I Learned 날짜 2023년 11월 28일 화요일 내용 테스트 코드 작성을 완료하고 PR을 올렸다. 코드에 대한 리뷰를 받고 재수정에 들어갔다. Pull Request 글로벌 개발팀 내에서 지킬 규칙에 대힌 회의가 있었다. commit과 PR 형식, 코드 작성과 formatting 등등 여러가지에 관해서.. 지금 버릇을 잘 들여놔야 나중에 나도 팀원들도 고생 안하지 않을까 싶다. Test Data 테스트 코드를 작성하는데 있어서 가장 까다로운 것은 적절한 테스트 데이터를 만드는 것이다. 어떤 필드를 채워야 할지, 어떤 객체 혹은 JSON 형식을 취해야 할지 등 여러모로 참 머리아프다. 이것저것 쑤셔넣다보면 계속 같은 곳을 맴돌게 되니 차근차근 가설을 세워나가면서 해결해야겠다. ...

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

파이썬 알고리즘 : 3 x n 타일링

2023년 11월 28일 알고리즘 문제풀이 문제 3 x n 타일링 난이도 Lv.2 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 def solution(n): dp = [0 for _ in range(5001)] dp[2] = 3 dp[4] = 11 for i in range(1,n+1): if n%2: return 0 if i%2: continue else: if not dp[i]: tmp = 2 tmp += dp[i-2]*dp[2] for x in range(2,i//2): tmp += dp[i-2*x]*2 dp[i] = tmp%1000000007 return dp[n] 진짜 어렵다. 홀수는 나올수 없으므로 무조건 0이라는 것은 일찍 발견했다. 하지만 일반항을 위한 점화식을 구하기가 어려웠다. 처음에 한 추론은 다음과 같다. ...

2023년 11월 28일 · 2 분 · 배준수

테스트 코드 만들기

Today I learned 날짜 2023년 11월 27일 월요일 내용 테스트 코드를 고쳤다. 근데 제대로 된 건지 모르겠다.. 반복 실행해서 일관성도 확인해보고, 원하는 검증이 이뤄진건지 로직도 다 확인해봐야 한다. 테스트 함수 1 TypeError 메시지로 보아 어떤 변수가 특정 함수 의 parameter로 없는 것으로 예상된다. 실제로 저 메서드를 찾아가보니 없길래 테스트 코드에서도 삭제해주었다. parameter로 들어간 값을 schemas 파일에서 Type 클래스를 가져와 그중 1개를 선택하도록 변경하였다. 메서드 내의 다른 함수의 반환 타입이 예상과 다르다는 오류가 발생했다. ...

2023년 11월 27일 · 3 분 · 배준수

파이썬 알고리즘 : 공원산책

2023년 11월 27일 알고리즘 문제풀이 문제 공원산책 난이도 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 def solution(park, routes): H = len(park) W = len(park[0]) a = 0 b = 0 for i in range(H): for j in range(W): if park[i][j] == 'S': a = i b = j def check(p,q,x,y): for i in range(1,q+1): if p == 'N': if x-i < 0 or park[x-i][y] == 'X': return False elif p == 'S': if x+i >= H or park[x+i][y] == 'X': return False elif p == 'E': if y+i >= W or park[x][y+i] == 'X': return False elif p == 'W': if y-i < 0 or park[x][y-i] == 'X': return False if p == 'N': return x-q,y elif p == 'S': return x+q,y elif p == 'E': return x,y+q elif p == 'W': return x,y-q i = 0 while i < len(routes): way_to_go, distance_to_go = routes[i].split() if not check(way_to_go,int(distance_to_go), a,b): i += 1 continue a,b = check(way_to_go,int(distance_to_go), a,b) i += 1 return [a,b] 어렵진 않은데 좀 귀찮고.. 그렇다. 그래도 이런 문제 많이 풀어서 어렵진 않다. 레벨이 1인 이유는 문제에서 따져야 하는 경우를 모두 설명해줘서 그런듯 하다. ...

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

파이썬 알고리즘 : 2 x n 타일링

2023년 11월 17일 알고리즘 문제풀이 문제 2 x n 타일링 난이도 Lv.2 코드 1 2 3 4 5 6 7 8 9 10 11 12 def solution(n): dp = [0 for _ in range(60001)] x = 1 while x <= n: if x == 1: dp[x] = 1 elif x == 2: dp[x] = 2 else: dp[x] = (dp[x-1] + dp[x-2])%1000000007 x += 1 return dp[n] 많이 볼 수 있는 DP문제이다. 2 x n 일땐 이전 조합들을 합친 것만으로도 다음 갯수를 산출할 수 있어서 크게 어렵지 않다. 수가 커지기 때문에 나머지로 표시해야 한다는 사실을 잠시 잊었다.. ...

2023년 11월 17일 · 1 분 · 배준수

파이썬 알고리즘 : X만큼 간격이 있는 n개의 숫자

2023년 11월 16일 알고리즘 문제풀이 문제 X만큼 간격이 있는 n개의 숫자 난이도 Lv.1 코드 1 2 3 4 5 6 7 8 def solution(x, n): answer = [] d = x num = x while len(answer) < n: answer.append(num) num += d return answer 크게 어려울 것 없는 문제였다. 문제에 제한 조건이 주어지는데 while문에 추가하면 마지막 테스트 케이스에서 틀린다. 문제가 알아서 제한하여 준다는 뜻이니 걸지 말것. ...

2023년 11월 16일 · 1 분 · 배준수

파이썬 알고리즘 : 124 나라의 숫자

2023년 11월 14일 알고리즘 문제풀이 문제 124 나라의 숫자 난이도 Lv.2 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 def solution(n): nums = [] while n: a = n%3 if a: n = n//3 nums.append(str(a)) else: n = n//3 -1 nums.append('4') nums.reverse() answer = ''.join(nums) return answer 코드 자체는 단순해보이지만 해결하는데 정말 어려운 문제였다. 등장할 수 있는 숫자가 3개(1,2,4)였기 때문에 3진법을 이용하면 될 것 같다는 생각 자체는 바로 떠올렸다. 하지만 답을 유추해내기 쉽지 않았는데 추가적인 조건이 있기 때문이다. 아래 표를 통해 설명하겠다. ...

2023년 11월 14일 · 2 분 · 배준수

파이썬 알고리즘 : 신고 결과 받기

2023년 11월 13일 알고리즘 문제풀이 문제 신고 결과 받기 난이도 Lv.1 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 def solution(id_list, report, k): n = len(id_list) answer = [0 for _ in range(n)] table = [[0 for _ in range(n)] for _ in range(n)] for x in report: sender, receiver = x.split() a = id_list.index(sender) b = id_list.index(receiver) table[b][a] = 1 for i in table: if sum(i) >= k: for j in range(len(i)): if i[j]: answer[j] += 1 return answer 어떤 배열들을 만들어야 하는지 헷갈렸지만 크게 어려운 문제는 아니었다. ...

2023년 11월 13일 · 1 분 · 배준수