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


[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 SimpleHTTPServer


    Python
    ( 출처 : Wikipedia )

    Python 명령어 한줄로 간단한 HTTP 서버를 띄우는 방법을 알아봅니다.


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


    WSGI Middleware

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

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

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


  • Resizing Images On AWS Lambda


    AWS Lambda
    (이미지 출처 : https://aws.amazon.com/ko/lambda/features/)

    고양이 방울(Belling The Cat) 앱을 구현하는 과정에서
    AWS S3에 업로드 된 이미지의 크기를 리사이징하는 내용을 다뤘습니다.
    (깨알같은 앱 홍보)

    AWS Lambda 위에서 구현됐고 Python PIL(Pillow) 라이브러리를 이용했습니다. 그 내용에 대해서 공유합니다.
    그리고 그 과정에서 만들어진 PIL 라이브러리를 포함한 ZIP 샘플을 공유드립니다.


  • Deploying Python Zip To AWS Lambda



  • Python 학습내용 기록




Disqus Social Community

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

i