[학습동아리] 2일차 07/12

규리(●'◡'●)·2023년 7월 12일
0

2023 학습동아리

목록 보기
2/9

활동일시 : 2일차 2023-07-12 21:30-23:30


목표

python으로 문제 풀이

문제

준식이는 수열 A[1], A[2], ..., A[N] (N ≥ 3) 을 가지고 있다. 이 수열에서 단 한 개의 수를 제외하고 나머지 수는 모두 같다. 그 수는 수열에서 몇 번째에 위치할까?

입력

첫째 줄에 테스트 케이스의 개수 T 가 주어진다.
각 테스트 케이스의 첫째 줄에 수열의 길이 N (3 ≤ N ≤ 100)이 주어진다.
둘째 줄에 A[1], A[2], ..., A[N]이 주어진다. 수열의 i번째 원소는 정수 A[i] (1 ≤ A[i] ≤ 100)이다.
주어지는 수열에서 단 한 개의 수를 제외하고 나머지 수는 모두 같다.

출력

각 테스트 케이스마다 문제의 정답이 수열에서 몇 번째에 위치하는지 출력한다.


코드

T = int(input())

for i in range(T):
    N = int(input())
    arr = list(map(int, input().split()))
    val = 0
    for idx in range(1, N-1): # 두번째부터 마지막의 원소 전까지 비교
        if arr[idx] != arr[idx-1] and arr[idx] != arr[idx+1]: # idx와 idx-1이 다르고, idx와 idx+1이 다르면 idx저장
            val = idx+1 # 몇번째인지 위치 출력이므로 idx+1
            break
    else:
        if arr[0] != arr[1]: # 첫 원소랑 두번째 원소 비교
            val = 1
        else: # 첫 원소랑 두번째 원소도 같다면 마지막 원소가 스파이
            val = N
    print(val)

풀이

입력된 리스트의 원소를 앞, 뒤로 비교하기 위해 리스트를 두번째원소부터 마지막 원소 전 까지 반복한다. 현재 원소와 전의 원소가 다르고, 현재 원소와 다음의 원소가 다르다면 현재 원소가 스파이임으로 출력될 값에 현재 원소가 몇번째인지 저장해주고 반복문을 종료한다.
만약 중간에 종료되지 않았다면, 첫번째 원소와 두번째 원소를 비교하여 두 원소가 다르면 첫번째 원소가 스파이이다. 두 원소가 같다면 마지막 원소가 스파이가 된다.


느낀점

for 루프가 정상적으로 종료되지 않고 break를 만났을때는 else가 실행되지 않는다는 사실을 알게 되었다. 그래서 flag변수를 따로 사용하지 않고, for루프 내에서 break를 사용한 뒤 else를 통해 for루프가 정상적으로 종료되었을때만 수행할 수 있다는 사실을 새롭게 알게 되었다. 시간 내에 스스로의 힘으로 해결하지 못하여서 다른 사람의 풀이를 참조해보았는데, 풀지 못하는 문제로 시간을 오랫동안 소모하지 않고 풀이를 참조하여 학습해보니 심리적 부담도 덜하였고 새롭게 배워가는 점도 있어서 좋았다.

0개의 댓글