카테고리 없음

[자료구조] [python] Dynamic Array

carayoon 2021. 2. 1. 18:30
728x90

Hackerrank의 Data structures 관한 문제 중에서 Easy에 속하는 문제이다. 원 문제 링크는 다음을 따라가보자. 

www.hackerrank.com/challenges/dynamic-array/problem

 

Dynamic Array | HackerRank

Learn to use dynamic arrays by solving this problem.

www.hackerrank.com

Dynamic Array은 초기 설정된 자료의 크기에 국한되지 않고, 데이터를 이후에 추가할 수 있는 확장 가능한 자료형이다. 

XOR은, 두 값이 동일하면 0을, 두 값이 동일하지 않으면 1을 출력하는 논리 연산이다

문제 푸는 데 어려웠던 지점

  • 1) 초반에 x,y가 무엇인지에 대해서 파악하는 부분에서 풀이 시간이 지체되었다. query type 1, 2를 설명하는 부분의 첫째줄에서, 1 x(곱하기) y로 이해하였다. 곱하기가 아니라, query의 두번째 요소를 가리키는 미지수 x를 가리키는 말이었다.
  • Find the value of element y % size(arr[idx]) .... in arr[idx] 는 arr[idx]에서 계산된 요소의 값을 Last Answer에 대입하라는 뜻이었다.  
def dynamicArray(n, queries):
    
    #문제 초기 설명대로, Last_answer 은 0으로 초기화, array는 2D의 2 by n개의 빈 list로 구성
    Last_answer = 0
    arr = [[] for i in range(n)]
    
    #마지막 output형태는 answer로 담아야, 최종적으로 제출된 화면에서 하나씩 print해줄 수 있다(시스템상)
    answer = []
    
    for q in queries:
        
        if q[0] == 1:
        	#XOR식은 '^'을 사용
            idx = (q[1]^Last_answer)%n
            arr[idx].append(q[2])
        
        else:
            idx = (q[1]^Last_answer)%n
            temp = q[2]%len(arr[idx])
            Last_answer = arr[idx][temp]
            answer.append(Last_answer)
        
    return answer
        
    # Write your code here

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    first_multiple_input = input().rstrip().split()

    n = int(first_multiple_input[0])

    q = int(first_multiple_input[1])

    queries = []

    for _ in range(q):
        queries.append(list(map(int, input().rstrip().split())))

    result = dynamicArray(n, queries)

    fptr.write('\n'.join(map(str, result)))
    fptr.write('\n')

    fptr.close()