이상을 꿈꾸는 몽상가.. 프로그래밍을 좋아함..


[Hackerank Challenges] Xor-sequence

Hackerrank Logo
( 이미지 출처 : https://www.hackerrank.com/ )

지인의 권유로 Xor-sequence 라는 문제를 풀어봤다.

1개의 테스트 케이스에 대해서 O(1)의 성능을 보이도록 프로그래밍했으므로
아마도 “최선의 답일 것이다” 라고 생각하며 뿌듯해하고 있었다.

문제를 다 풀고 나니까 다른 사람의 풀이도 볼 수 있게되서 둘러보고 있었다.
그 중 Python 으로 푼 어떤 스위스 사람의 풀이를 열어보고서는 나의 뿌듯함은 연기가 되어 사라졌다.


내가 놓친 몇가지 부분들이 눈에 밟힌다.

그래도 다행(?)인 것은
스위스 사람빼고 다른 이들의 문제풀이를 열어보면
읽어보기도 싫을 정도의 코드들도 있다는 점이다.

자야될 시간이라서 자세히 기록하진 못하고
나의 풀이와 그의 풀이를 기록해두고 나중에 알고리즘 문제에 대해서 설명을 해보자.

문제설명

풀이

핵심내용

  • XOR 연산의 특징
  • 주어진 데이터의 패턴

나의 풀이

#!/bin/python

import sys

def __sigma_xor(start_basecamp, destination):
    if start_basecamp > destination:
        return 0

    if start_basecamp == destination:
        return start_basecamp

    value = start_basecamp
    result = start_basecamp
    for val in range(start_basecamp+1, destination+1):
        value = value ^ val
        result = result ^ value

    return result


def question(L, R):
    first_basecamp = (L // 8) * 8
    next_basecamp = first_basecamp + 8

    if next_basecamp >= R:
        result = __sigma_xor(first_basecamp, L-1) ^ __sigma_xor(first_basecamp, R)
        return result

    result = __sigma_xor(first_basecamp, L-1) ^ __sigma_xor(first_basecamp, next_basecamp-1)

    last_basecamp = (R // 8) * 8

    result = result ^ __sigma_xor(last_basecamp, R)
    return result

Q = int(input().strip())
for a0 in range(Q):
    L,R = input().strip().split(' ')
    L,R = [int(L),int(R)]
    print(question(L,R))

스위스 사람의 풀이

#!/bin/python

import sys

def f(n):
    r = (n % 8) / 2
    if r == 0:
        return n
    elif r == 1:
        return 2
    elif r == 2:
        return n + 2
    else:
        return 0

Q = int(raw_input().strip())
for a0 in xrange(Q):
    L,R = raw_input().strip().split(' ')
    L,R = [long(L), long(R)]
    print f(R) ^ f(L - 1)

반성


Donations ❤

제가 작성한 글이 작게라도 도움이 되었기를 바랍니다.
관심 가져주시는 분이 있는 것을 느끼고 힘내기 위해 기부 버튼을 만들어봤습니다.
혹시 가능하시다면 $1 라도 기부 부탁드립니다 ^^





Associated Posts

관련된 주제를 살펴볼 수 있도록 동일한 Tag를 가진 글들을 모아뒀습니다. 제목을 눌러주세요.

  • Python WAS 구축하기 ( Django, Nginx, Gunicorn )


    Django Gunicorn

    ( 출처 : Wikipedia-Django, Gunicorn )

    Python으로 REST API 서비스를 위한 WAS(Web Application Server) 구축을 진행합니다.

    Django만으로도 REST API를 오픈할 수 있지만
    Django의 runserver는 단순히 테스트만을 위한 기능으로
    운영환경에서 사용하면 성능상 문제를 겪게 됩니다.

    운영모드에서 Gunicorn 같은 WSGI(Web Server Gateway Interface) 미들웨어와 연동이 필요합니다.

    WSGI Middleware


  • Deploying Python Zip To AWS Lambda


    AWS Lambda Python
    (이미지 출처 : https://aws.amazon.com/ko/lambda/features/, https://www.python.org/)

    주로 Python 언어로 AWS Lambda를 유용하게 사용하고 있습니다.

    AWS Lambda에서 제공하는 몇몇 Python 기본 라이브러리만 사용해서 코딩을 한다면 신경쓰지 않아도 되지만
    기본 제공되지 않는 라이브러리를 사용하려면 작성한 Python 소스파일(.py)와 필요한 라이브러리를 Zip 파일로 묶어서 AWS Lambda에 올려야합니다.


  • Python 학습내용 기록


    Python
    ( 출처 : Wikipedia )

    Python 학습을 했습니다. 실제로 사용하면서 무엇을 만들어본 것은 아니고요.
    헷갈리기 쉬운 기본적인 문법, 주의해야할 사항 그리고 독특한 사항들 위주로 기록해봅니다.



Disqus Social Community

SNS계정으로 댓글을 달아도 SNS에 글이 남지 않습니다.
이메일 주소 입력으로 글을 남길 수 있으며, 답변이 달리면 이메일로 알림을 받을 수 있습니다.

i