[Python 문제풀이] 10일차

2020. 7. 18. 11:0003. Resources/Python

728x90
반응형

Day_10

Intro

Q16. Are Similar?

Two arrays are called similar if one can be obtained from another by swapping at most one pair of elements in one of the arrays.

Given two arrays a and b, check whether they are similar.
제출 코드

def areSimilar(a, b):
    if a == b: # 둘이 같으면 참
        return True
    else: # 다를 때
        # 정렬한 값이 같은 경우, 스왑해야하는 갯수를 체크하면 된다
        c = sorted(a) 
        d = sorted(b)
        diffCount = 0
        # 정렬한 값이 같은 경우
        if c == d:
            for i in range(len(c)):
                if a[i] != b[i]:
                    diffCount += 1

                if diffCount > 2:
                    return False
            return True
        # 정렬한 값이 다른 경우
        else:    
            return False

작성 흐름 (제출 코드에도 같은 주석)

# 테스트 케이스
a = [1,2,3]
b = [2,1,3]

if a == b: # 둘이 같으면 참
    print("True")
else: # 다를 때
    # 정렬한 값이 같은 경우, 스왑해야하는 갯수를 체크하면 된다
    c = sorted(a) 
    d = sorted(b)
    diffCount = 0
    # 정렬한 값이 같은 경우
    if c == d:
        # 전체 길이만큼 보면서
        for i in range(len(c)):
            # 원래 값에서 차이가 있는 갯수를 센다
            if a[i] != b[i]:
                diffCount += 1

            # 차이 값이 2개인 경우 한 번 스왑을 해서 해결할 수 있지만, 그 이상인 경우 한 번으로 해결 불가능
            if diffCount > 2:
                print("False")
                break
        print("True")
    # 정렬한 값이 다른 경우
    else:    
        print("False")
반응형

'03. Resources > Python' 카테고리의 다른 글

[Python 문제풀이] 12일차  (0) 2020.07.20
[Python 문제풀이] 11일차  (0) 2020.07.19
[Python 문제풀이] 9일차  (0) 2020.07.17
[Python 문제풀이] 8일차  (0) 2020.07.16
[Python 문제풀이] 7일차  (0) 2020.07.15