-
TIL 2023.04.20내일배움캠프 2023. 4. 20. 20:49
https://school.programmers.co.kr/learn/courses/30/lessons/17681?language=python3
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
오늘 푼 알고리듬 문제
def solution(n, arr1, arr2): answer = [] arr1_bin = [] arr2_bin = [] final_map = [] # 파이널 맵에 빈 문자열을 n개 만큼 만들어준다. for i in range(n): final_map.append('') for x in arr1: y = format(x, "b") while True: if len(y) < n: y = '0' + y elif len(y) == n: break arr1_bin.append(y) for x in arr2: y = format(x, "b") while True: if len(y) < n: y = '0' + y elif len(y) == n: break arr2_bin.append(y) for x in range(n): for y in range(n): if arr1_bin[x][y] == '1' or arr2_bin[x][y] == '1': final_map[x] += '1' elif arr1_bin[x][y] == '0' and arr2_bin[x][y] == '0': final_map[x] += '0' for i in final_map: i = i.replace('1', '#') i = i.replace('0', ' ') answer.append(i) return answer
난 이렇게 풀었다.
arr1 과 arr2의 숫자를 이진법으로 바꿔 저장할 리스트를 초기화 하고
그 리스트를 합쳐 최종 비밀지도로 만들 final_map 이라는 리스트를 n개의 빈 문자열을 가진 리스트로 만들어줬다.
후 각 배열을 순회하며 십진법 수를 이진법으로 변환하고 길이가 부족하면 앞에 0을 더해 길이를 n으로 맞춰줬다.
이진법으로 바뀐 각 배열을 순회하며 해당 좌표의 값이 둘 중 하나라도 1일 경우 final map에 1을, 둘 다 0일 경우 0을 더해줬다.
그 후 finla map의 1을 #으로 0을 ' '로 바꾸고 반환해줬다리
이번에도 꽤나 정직하고 무식하게 풀었다.
역시나 코딩 천재들은 이 문제를 간단하게 해결했다.
def solution(n, arr1, arr2): answer = [] for i,j in zip(arr1,arr2): a12 = str(bin(i|j)[2:]) a12=a12.rjust(n,'0') a12=a12.replace('1','#') a12=a12.replace('0',' ') answer.append(a12) return answer
나는 각 배열을 따로 순환했지만 이 분은 zip을 이용해 묶어서 순회했고
| 비트 or 연산자를 이용해 내가 포문 두 번에 이중 포문까지 사용한 걸 한번에 해결했다.
rjust 함수로는 와일문까지 써가며 문자열 길이를 맞춰 준 걸 한 줄로 써버렸고
replace는 비슷하게 이용했다.
여기서 처음 보는 걸 알아보자
먼저 비트 연산자
연산자 기능 문법 설명 & 비트 AND a & b a와 b의 비트를 AND 연산 | 비트 OR a | b a와 b의 비트를 OR 연산 ^ 비트 XOR a ^ b a와 b의 비트를 XOR 연산(배타적 OR, Exclusive OR) ~ 비트 NOT ~x x의 비트를 뒤집음 여기서 사용한 건 | 로 비트 OR 연산자다. 둘 중 하나라도 1이라면 1을 반환한다.
예를 들어, bin( i | j )에서 i가 5 (2진수로 101)이고 j가 3 (2진수로 011)인 경우, i | j는 7 (2진수로 111)이고 bin(i | j)는 문자열 '0b111'을 반환한다. 문자열 슬라이싱으로 앞의 0b는 도려내었다.
잘 사용하진 않을 것 같다.
다음 rjust()
비슷한 함수로 rjust() ljust() zfill() 이 있다.
rjust() 는 오른쪽으로 정렬하면서 왼쪽을 채우는 함수
인자로 길이와 채워줄 문자를 받는다.
'1001'.rjust(5, '0') >>> '01001'
ljust() 는 반대로 왼쪽으로 정렬하면서 오른쪽을 채우는 함수
마찬가지로 인자로 길이와 채워줄 문자를 받는다.
'1001'.ljust(5, '0') >>> '10010'
zfill() 은 왼쪽에 0을 채워주는 함수다. 여기서는 이걸 쓰는게 더 간단했을 것이다.
인자로 길이를 받는다.
'1001'.zfill(5) >>> '01001'
장고 심화 4주차 drf 관련 문서들
- Managing files | Django documentation | Django (djangoproject.com)
- How to manage static files (e.g. images, JavaScript, CSS) | Django documentation | Django (djangoproject.com)
- How to manage static files (e.g. images, JavaScript, CSS) | Django documentation | Django (djangoproject.com)
- Model field reference | Django documentation | Django (djangoproject.com)
- How to deploy static files | Django documentation | Django (djangoproject.com)
- python - Add a count field to a django rest framework serializer - Stack Overflow
- Serializers - Django REST framework (django-rest-framework.org)
- Serializer fields - Django REST framework (django-rest-framework.org)
- Serializer relations - Django REST framework (django-rest-framework.org)
- Making queries | Django documentation | Django (djangoproject.com)
- like count로 정렬하는법
- id의 리스트로 쿼리셋 가져오는법
'내일배움캠프' 카테고리의 다른 글
WIL 내일배움캠프 6주차 (0) 2023.04.21 TIL 2023.04.21 (2) 2023.04.21 TIL 2023.04.19 (0) 2023.04.19 TIL 2023.04.18 (0) 2023.04.18 TIL 2023.04.17 (0) 2023.04.17