현대 모비스 경진대회 “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

[여담]

정답을 확인할 수 없기 때문에 가지고 있는 테스트 케이스를 만족하는 수준까지만 풀이를 진행하였습니다.

문제에 대해서 틀린 점 혹은 다른 해석은 언제나 환영합니다. (상단의 이메일 참고)