본문 바로가기
프로그래머스/Python

[프로그래머스] 테이블 해시 함수 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2024. 7. 1.
728x90
반응형

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제 설명

반응형

2. 풀이과정

해당 문제는 처음에 정렬만 잘해주면 나머지는 쉽게 해결할 수 있다.

테이블의 튜플을 정렬할 때 기준은 2개가 있는데, col 번째 칼럼의 값을 기준으로 오름차순 정렬하고 만약 그 값이 동일하면 기본키인 첫 번째 칼럼의 값을 기준으로 내림차순 정렬한다.

해당 기준으로 정렬을 하려면 거꾸로 기본키 값으로 먼저 내림차순 정렬을 하고, 이후에 col 번째 칼럼의 값을 기준으로 정렬하면 원하는 정렬 후 결과를 얻을 수 있다.

테이블의 튜플을 정렬했다면 S_i를 각각 구하여 모든 S_i 결과XOR 하면 된다.

 

  1. 기본키를 기준으로 우선 내림차순 정렬을 한다. data = sorted(data, key = lambda x : x[0], reverse = True)
  2. 이후 col 번째 칼럼의 값을 기준으로 오름차순 정렬을 한다. data = sorted(data, key = lambda x : x[col - 1])
  3. S_i 결과를 저장할 리스트를 생성한다. result = []
  4. 문제에서 주어진 i 값을 반복하며 for i in range(row_begin, row_end + 1)
    1. S_i 값을 저장할 변수를 생성하고 초기화한다. SUM = 0
    2. i번째  행의 튜플을 불러와 각 칼럼의 값을 i로 나눈 나머지를 합한다. for d in data[i - 1]: SUM += d % i
    3. 최종 합을 결과 리스트에 추가한다. result.append(SUM)
  5. 결과 리스트의 값을 하나씩 불러와 XOR 한 결과를 정답으로 저장한다. for r in result: answer = answer ^ r

3. 소스코드

def solution(data, col, row_begin, row_end):
    answer = 0
    
    data = sorted(data, key = lambda x : x[0], reverse = True)
    data = sorted(data, key = lambda x : x[col - 1])
    
    result = []
    for i in range(row_begin, row_end + 1):
        SUM = 0
        for d in data[i - 1]:
            SUM += d % i
            
        result.append(SUM)

    for r in result:
        answer = answer ^ r

    return answer
728x90
반응형