현대 모비스 경진대회 “3번” 문제를 풀어보았습니다.
혹시 해당 포스팅이 저작권상 문제가 되는 경우 이메일로 연락을 주시면 조치하도록 하겠습니다.
이메일 - jano.jeon@gmail.com
Solution
문제를 유출하지 말라는 조건이 있었기 때문에 문제는 생략하고 본인의 문제에 대한 이해 부분과 코드만 작성했습니다.
[문제 이해]
- bitwise and 연산을 통해서 0을 만들기 위한 리스트를 반환
- a[n]의 bitwise and 연산의 결과가 return값
이해한 내용을 바탕으로 코드를 작성했습니다.
[코드]
def solution(m, b):
# b를 m에 의해 나눈 2차원 리스트
temp = [b[sum(m[0:i]):sum(m[0:i+1])] if i != 0 else b[0:n] for i, n in enumerate(m)]
# bitwise and 연산 결과 -> 10진수 반환
def BitwiseAnd(a, b):
a = bin(a)[2:]
b = bin(b)[2:]
a_leng = len(a)
b_leng = len(b)
if a_leng >= b_leng:
leng = a_leng
b = b.zfill(leng)
else:
leng = b_leng
a = a.zfill(leng)
result = ''
for n1, n2 in zip(a, b):
if n1 == n2:
result += n1
else:
result += '0'
return int(result, 2)
# 입력된 리스트의 요소를 bitwise and 연산하는 재귀함수
def recursion(_list):
_list = _list[:]
while len(_list) > 1:
bin_num = BitwiseAnd(_list[0], _list[1])
_list[0] = bin_num
del _list[1]
if len(_list) == 1:
_list = _list[0]
else:
_list = recursion(_list)
return _list
answer = []
# 나눠둔 리스트의 요소를 연산에 대입
for n in temp:
answer.append(recursion(n))
return answer
[여담]
정답을 확인할 수 없기 때문에 가지고 있는 테스트 케이스를 만족하는 수준까지만 풀이를 진행하였습니다.
문제에 대해서 틀린 점 혹은 다른 해석은 언제나 환영합니다. (상단의 이메일 참고)