디스 프로그래머 (This Programmer)

[프로그래머스/연습문제/파이썬3(python3)] 배열 검증하기 본문

알고리즘/풀이

[프로그래머스/연습문제/파이썬3(python3)] 배열 검증하기

디스 프로그래머 2018. 9. 15. 01:18
[프로그래머스_연습문제_파이썬] 배열 검증하기

문제

길이가 n일 배열에 1부터 n까지 숫자가 중복 없이 한 번씩 들어있는지를 확인하려고 합니다.

1부터 n까지 숫자가 중복 없이 한 번씩 들어 있는 경우 true를, 아닌 경우 false를 반환하도록 함수 solution을 완성해주세요. 

제한사항

  • 배열의 길이는 10만 이하입니다.
  • 배열의 원소는 10만 이하의 자연수입니다. 

입출력 예

arrresult
[4, 1, 3, 2]true
[4, 1, 3]false

입출력 예 설명

입출력 예 #1

입력이 [4, 1, 3, 2]가 주어진 경우, 배열의 길이가 4이므로 배열에는 1부터 4까지 숫자가 모두 들어 있어야 합니다. [4, 1, 3, 2]에는 1부터 4까지의 숫자가 모두 들어 있으므로 true를 반환하면 됩니다.

 

입출력 예 #2

[4, 1, 3]이 주어진 경우, 배열의 길이가 3이므로 배열에는 1부터 3까지의 숫자가 모두 들어 있어야 합니다. [4, 1, 3]에는 2가 없고 4가 있으므로 false를 반환하면 됩니다.

풀이

def solution(arr):
	arr.sort()
	answer = True if arr[len(arr) - 1] == len(arr) else False
	return answer

설명

굉장히 간단하게 생각했다. 이 문제에서 말하는 조건을 그냥 자연어로 정리해보자면 이렇다.

배열이 오름차순으로 정렬돼있을 때 마지막 요소에 해당하는 숫자가 해당 인덱스 키값 + 1이 아니면 조건을 충족하지 못하는 것이다.

해서 코드로 이렇게 구현하였다. Python에서는 result = condition ? true : false형태의 3항 연산자를 사용할 수 없기 때문에 위 모양으로 구현하여야 한다. 해서 이렇게 만들어졌다.

2 Comments
  • 프로필사진 프로그래머 2020.03.22 15:41 안녕하세요 ~ 한창 공부하고 있는데 도움이 많이 됐습니다.
    문제에 조금 질문이 있습니다 ~
    저렇게 코딩이 되면 중복 체크가 안되지 않나요?
    data = [1,2,3,3,5] 여도 true 가 나와버리는 알고리즘 아닌가요?
  • 프로필사진 Favicon of https://this-programmer.com 디스 프로그래머 2020.03.24 02:32 신고 오... 맞네요. 제가 멍청했습니다. 쉬운 문제라 생각해서 경우를 고려하지 않은 것 같아요. 지적해주셔서 정말 감사합니다.

    말씀해주신 케이스를 방지하기 위해

    arr.sort()
    밑에
    arr = list(set(arr))
    라는 코드를 추가하면 될 것 같네요! 감사합니다!
댓글쓰기 폼