https://school.programmers.co.kr/learn/courses/30/lessons/147354
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
from functools import reduce
def solution(data, col, row_begin, row_end):
s = sorted(data, key = lambda x : (x[col-1], -x[0]))
numbers = []
result = 0
for i in range(row_begin, row_end+1):
number = sum([n % i for n in s[i-1]])
numbers.append(number)
result = reduce(lambda x, y : x^y, numbers)
return result
먼저 문제에서 요구한대로 정렬된 데이터 s를 생성합니다.
s는 sorted()함수를 이용하여 주어진 data를 col번째 컬럼의 값(x[col-1])을 기준으로 오름차순 정렬하고
중복일경우에는 첫번째 컬럼(x[0])을 내림차순정렬합니다.
data가 [[2,2,6],[1,5,10],[4,2,9],[3,8,3]]일 경우
s는 [[4,2,9],[2,2,6],[1,5,10],[3,8,3]]으로 정렬이 됩니다.
그리고 row_begin부터 row_end+1까지의 i값을 반복합니다.
row_begin = 2, row_end= 3 일때
i = {2,3}에 해당합니다.
리스트의 시작 인덱스는 0부터 시작하기 때문에 s[1]로 $s_2$를 추출할 수 있습니다.
그래서 s[i-1]로 정렬된 data의 행을 추출합니다.
이때 list comprehension을 사용하여 s[i-1]에 있는 모든 값들을 i로 나눈 나머지 값들을 모두 더하여 number로 만들어줍니다.
이렇게 생성한 number는 numbers 리스트에 저장합니다.
functools의 reduce 함수를 사용하여 numbers의 값들을 누적합니다.
lambda x : x^y을 하여 bitwise XOR연산을 수행하도록 하고 결과를 result에 담아 반환합니다.
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 백준 수 찾기 파이썬(Python) (0) | 2023.01.17 |
---|---|
[코딩테스트] 백준 부분수열의 합 파이썬(Python) (0) | 2023.01.14 |
[코딩테스트] 프로그래머스 개인정보 수집 유효기간 파이썬(Python) (0) | 2023.01.11 |
[코딩테스트] 프로그래머스 [1차] 뉴스 클러스터링 파이썬(Python) (0) | 2023.01.07 |
[코딩테스트] 프로그래머스 메뉴 리뉴얼 파이썬(Python) (0) | 2023.01.05 |