-
TIL 2023.04.05내일배움캠프 2023. 4. 5. 21:25
오늘은 페어프로그래밍 때 두 문제를 풀었다.
하나는 좀 애먹었고 하나는 금방 풀었다.
애먹은 게 이것.
https://school.programmers.co.kr/learn/courses/30/lessons/120861?language=python3
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def solution(keyinput, board): answer = [0, 0] #현재 좌표 0,0 으로 초기화 move = {'left': [-1, 0], 'right': [1, 0], 'up': [0, 1], 'down': [0, -1]} #방향별로 이동 좌표를 딕셔너리로 생성 for i in keyinput: for e, (a, k) in enumerate(zip(answer, key[i])): #enumerate 와 zip 동시에 사용 answer[e] = a+k #answer[e] 에 answer의 e번째 인덱스 값(현재좌표)과 key[i]의 e번째 인덱스값의 합(이동값)을 할당(좌표 이동) if abs(answer[0]) > (board[0]-1)/2 or abs(answer[1]) > (board[1]-1)/2: #보드를 벗어나면 실행 취소 answer[e] -= k return answer #최종 좌표 출력
저는 이렇게 풀었습니다요.
이 중에 새롭게 알게된 문법들이 있죠
첫 번째로 zip() 이라는 함수입니다.
zip() 함수는 여러 개의 순회 가능한(iterable) 객체를 인자로 받고, 각 객체가 담고 있는 원소를 튜플의 형태로 차례로 접근할 수 있는 반복자(iterator)를 반환합니다. 설명이 좀 어렵게 들릴 수도 있는데요. 간단한 예제를 보면 이해가 쉬우실 겁니다.
>>> numbers = [1, 2, 3] >>> letters = ['a', 'b', 'c'] >>> for i in zip(numbers, letters): ... print(i) ... (1, 'a') (2, 'b') (3, 'c')
위 예제를 보면 zip() 함수로 numbers 라는 리스트와 letters 라는 리스트를 묶어서 for문을 돌면서 출력하고 있습니다. 이 때 i 는 각 리스트의 같은 인덱스 값을 가진 요소를 묶어서 튜플 형태로 값을 가지게 되네요.
>>> for i, j in zip(numbers, letters): ... print(i, j) ... 1 a 2 b 3 c
이렇게 병렬 처리로 따로 뽑아주는 것도 가능합니다.
저는 이 함수로 move 라는 딕셔너리의 각 벨류와 answer로 선언한 현재 좌표를 따로 뽑아서 x좌표 y좌표 각 더하는 기능을 만들었습니다.
두 번째로,
enumerate()와 zip() 함께 사용할 때는 zip의 요소들을 괄호()로 묶어서 사용해주시면 됩니다.
for e, (a, k) in enumerate(zip(answer, key[i])):
이런식으로 말이죠.
세 번째로는
절대값 함수입니다.
숫자 앞에 abs()를 씌워주시면 절대값으로 사용하실 수 있습니다.
abs(-99) = 99
그리고 장고 개인 과제가 시작됐는데요.
이거 아주 어렵습니다요. 화이팅
'내일배움캠프' 카테고리의 다른 글
장고 개인프로젝트 ERD (0) 2023.04.07 TIL 2023.04.06 (0) 2023.04.06 TIL 2023.04.04 (0) 2023.04.04 TIL 2023.04.03 (0) 2023.04.03 WIL 내일배움캠프 3주차 (0) 2023.03.31