ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [알고리즘 팁] x=y 대칭되는 값들을 찾아보자!
    알고리즘 2024. 3. 6. 17:02
    728x90

     

    알고리즘을 풀다보면 x=y 대칭되는 값들을 얻어야 했었는데, 해당 값을 얻기 위한 중간 과정팁을 공유하고자 포스팅합니다

     

    n = int(input())
    arr = [
        list(map(int,input().split()))
        for _ in range(n)
    ]

    보통 알고리즘 문제에서 처음에 이런식으로 2차원 배열을 입력 받습니다 

     

    4              
    0 1 2 3
    4 0 5 6
    7 1 0 2
    3 4 5 0

    이렇게 받았다고 가정을 해보면

     

    저희는 zip 메소드를 사용해서 구해보겠습니다.

     

    참고로 내장함수 zip 메소드는 데이터 개수가 같은 자료형 여러 개를, 같은 인덱스의 데이터끼리 튜플(tuple)로 결합해 주는 함수입니다.

    리스트 응용 사례를 보여드리면, 아래와 같이 출력됩니다.

    fruit = ['사과', '바나나', '파인애플']
    price = [1200, 1000, 7000]
    quantity = [20, 12, 3]
    
    fruit_list = list(zip(fruit, price, quantity))
    
    print(fruit_list)
    출력 결과
    [('사과', 1200, 20), ('바나나', 1000, 12), ('파인애플', 7000, 3)]

     

    아래와 같이 하나의 행의 값과 같은 값에 해당하는 열의 값을 zip을 통해 묶어봅니다.

    ( 1행의 값과 1열의 값을 묶고, 2행의 값과 2열의 값을 묶는다는 말입니다! )

    for i,j in zip(arr, zip(*arr)):
        print(i,j)
    
    # for i,j in zip(arr, zip(*arr)) 이렇게하면 대칭되는 값을 찾아볼 수 있다
    [0, 1, 2, 3] (0, 4, 7, 3) # 1행, 1열
    [4, 0, 5, 6] (1, 0, 1, 4) # 2행, 2열
    [7, 1, 0, 2] (2, 5, 0, 5) # 3행, 3열
    [3, 4, 5, 0] (3, 6, 2, 0) # 4행, 4열
    
    # S(ij) 이렇게 있을때 1열2행 + 2열1행 값을 표현한것
    mem = [sum(i) + sum(j) for i,j in zip(arr, zip(*arr))]
    
    print(mem)

     

    위와 같이 for을 통해서 특정 값들을 추출할 수 있습니다.

    해당을 통해 나온값들을 응용해서 마주한 문제를 풀 수 있는데 도움이 되었으면 좋겠습니다! 

Designed by Tistory.