가까운 1 찾기

뚜니어리·2023년 7월 15일
0

알고리즘

목록 보기
1/5

가까운 1 찾기

문제설명

정수 배열 arr가 주어집니다.
이때 arr의 원소는 1 또는 0입니다.
정수 idx가 주어졌을 때, idx보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요.
단, 만약 그러한 인덱스가 없다면 -1을 반환합니다.

제안사항

3 ≤ arr의 길이 ≤ 100'000
arr의 원소는 전부 1 또는 0입니다.

입출력 예

입출력 예 설명

입출력 예 #1
1보다 크면서 원소가 1인 가장 작은 인덱스는 3입니다. 따라서 3을 return 합니다.

입출력 예 #2
4번 인덱스 이후에 1은 등장하지 않습니다. 따라서 -1을 return 합니다.

입출력 예 #3
3번 인덱스의 값이 1입니다. 따라서 3을 return 합니다.

처음 내 풀이

def solution(arr, idx):
    answer = 0
    
    for i,j in enumerate(arr):
    # print(i,j)
    # i = index 번호
    # j = 배열 내 값

    # 인덱스 값이 idx 보다 크고,
    # 배열 내 값이 1인 가장 작은 인덱스 번호 반환
    # 인덱스가 없다면, -1 반환

    # 1. j값이 1인 인덱스 값을 찾는다.
        if j == 1:
            answer = i

            # 2. j가 1인 값 안에서 인덱스(i) 값이 idx 값 보다 크면 i를 반환
            if i >= idx:
                answer = i

                break
            # 2-1. 크지 않다면 -1 반환
            else:
                answer = -1

        else:
            answer = -1
    
    return answer

도움 받은 풀이

def solution(arr, idx):
    answer = -1
    
    for i in range(idx, len(arr)):
        if arr[i] == 1:
            answer = i
            
            break
    
    return answer

도움 받은 이유

  1. 처음 풀이 때 break를 사용 안해서 계속 3번 예시에서 오류가 났었다...
    3시간 정도 고민해서 결국 도움을 요청 했는데..
    break 를 걸어주니.. 바로 해결..!

  2. 시간 복잡도
    +4 점을 받아도 시간이 되게 오래 걸려서 이게 맞나..? 싶었는데
    새로운 풀이를 알려주었다..

결론

  1. 가장 작은 인덱스의 값이라는 조건을 걸지 않았어서 걱정했었는데
    새로운 풀이에서 range로 범위를 정해줘서 가장 작은 인덱스의 값의 조건을 정해주었다...

  2. break의 중요성....
    여기서든 저기서든 break를 사용해서 멈춰주지않으면.. 결과값이 계속 변경된다..
    값이 나왔을 때를 위해서 break로 결과가 나오면 바로 내어주자...

profile
삽질과 저장소의 그 중간

0개의 댓글