[파이썬] 프로그래머스 : 테이블 해시 함수 (Lv.2)
https://school.programmers.co.kr/learn/courses/30/lessons/147354
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
0. 방향성 생각
문제에서 하란대로 구현하기.
다중 입력에 대한 bitwise XOR 구현하는거만 잘 해주면 된다.
1. mod 구하기
def solution(data, col, row_begin, row_end):
data.sort(key=lambda x:(x[col-1],-x[0]))
temp = []
for i in range(row_begin-1,row_end): # S_i
q = 0
for j in data[i]:
q += j%(i+1)
temp.append(bin(q)[2:])
print(temp)
# 출력 ['0', '100']
주어진 범위 row_begin, row_end에 대해서 모듈러 연산을 해준다.
data[i]에서 모든 모듈러 연산의 합을 q에 할당하고 이진수로 바꿔서 temp에 저장하기.
2. 자리수 맞추기
leng = 0
for i in temp:
if len(i) > leng : leng = len(i)
print(leng)
# 출력 : 3
answer = []
for i in temp:
answer.append(list('0'*(leng-len(i))+i))
print(answer)
# 출력 [['0', '0', '0'], ['1', '0', '0']]
XOR 연산을 위해 비어있는 자리수의 경우 연산이 안되므로 temp에 들어있는 최대 문자열 길이를 leng으로 놓고,
leng보다 작은 길이의 경우 0으로 채운다. ljust로 채워도 된다.
3. 답 구하기
s = ''
for i in zip(*answer):
s += str(i.count('1')%2)
print(s)
# 출력 100
return int(s,2)
2차원 배열에서 zip(*리스트) 이걸 쓰면 행끼리 저장되있던게 열끼리 저장되게 바뀐다.
여기서 열끼리 저장되는 거에서 1의 개수를 세고 2로 나누면 된다.
마지막에는 정수로 변환
['0', '0', '0']
['1', '0', '0']
('0', '1')
('0', '0')
('0', '0')
위에 있던게 zip(*리스트) 쓰면 아래거로 바뀜
전체코드
def solution(data, col, row_begin, row_end):
data.sort(key=lambda x:(x[col-1],-x[0]))
temp = []
for i in range(row_begin-1,row_end): # S_i
q = 0
for j in data[i]:
q += j%(i+1)
temp.append(bin(q)[2:])
print(temp)
leng = 0
for i in temp:
if len(i) > leng : leng = len(i)
print(leng)
answer = []
for i in temp:
answer.append(list('0'*(leng-len(i))+i))
print(answer)
s = ''
for i in zip(*answer):
s += str(i.count('1')%2)
print(s)
return int(s,2)
코멘트
문자열, 진법변환 잘 하면 쉬운문제
'Algorithm > etc' 카테고리의 다른 글
[파이썬] 프로그래머스 : 오픈채팅방 (Lv.2) (0) | 2023.07.15 |
---|---|
[파이썬] 프로그래머스 : 파일명 정렬 (Lv.2) (0) | 2023.07.15 |
[파이썬] 프로그래머스 : 방문 길이 (Lv.2) (0) | 2023.07.11 |
[파이썬] 프로그래머스 : n^2 배열 자르기 (Lv.2) (0) | 2023.07.10 |
[파이썬] 프로그래머스 : 카펫 (Lv.2) (0) | 2023.07.10 |
[파이썬] 프로그래머스 : 우박수열 정적분 (Lv.2) (0) | 2023.07.08 |
[파이썬] 프로그래머스 : 줄 서는 방법 (Lv.2) (0) | 2023.07.06 |
댓글