백준 문제 풀이 12595 ( Odd Man Out (small) )

문제

You are hosting a party with G guests and notice that there is an odd number of guests! When planning the party you deliberately invited only couples and gave each couple a unique number C on their invitation. You would like to single out whoever came alone by asking all of the guests for their invitation numbers.

( 해석 )

당신은 G 손님들과 파티를 열었고 이상한 손님이 있다는 것을 알아차리시오! 파티를 계획할 때 당신은 의도적으로 커플만을 초대했고 각각의 커플에게 초대장에 고유한 C 번호를 부여했다. 당신은 모든 손님들에게 초대 번호를 물어봄으로써 혼자 온 사람을 가려내고 싶어한다.

( 번역 - Papago 쨩 )

입력

The first line of input gives the number of cases, N. N test cases follow. For each test case there will be:

  • One line containing the value G the number of guests.
  • One line containing a space-separated list of G integers. Each integer C indicates the invitation code of a guest.

Limits

  • 1 ≤ N ≤ 50
  • 0 < C ≤ 2147483647
  • 3 ≤ G < 100

( 해석 )

첫 번째 입력 라인은 사례 수 N을 제공한다. N개의 테스트 사례가 뒤따른다. 각 테스트 사례에 대해 다음이 있을 것이다.

  • G가 포함된 한 줄의 게스트 수입니다.
  • 공백으로 구분된 G 정수의 목록을 포함하는 하나의 선. 각 정수 C는 게스트의 초대 코드를 표시한다.

한계

  • 1 ≤ N ≤ 50
  • 0 < C ≤ 2147483647
  • 3 ≤ G < 100

출력

For each test case, output one line containing "Case #x: " followed by the number C of the guest who is alone.

( 해석 )

각 테스트 케이스에 대해 "케이스 #x: "가 포함된 라인 1개를 출력한 후 혼자 있는 게스트의 숫자 C를 출력한다.

예제 입력 1


3
3
1 2147483647 2147483647
5
3 4 7 4 3
5
2 10 2 10 5

예제 출력 1


Case #1: 1
Case #2: 7
Case #3: 5

풀이


import sys                            				# 모듈

test = int(sys.stdin.readline().strip())            		# 테스트 케이스 입력

for i in range(test):                       			# test 만큼 루프
    human = int(sys.stdin.readline().strip())      		# 몇명인지 입력
    guest = list(str(sys.stdin.readline().strip().split()))  	# 게스트 초대코드 입력
    guest.sort()                         			# guest 리스트 정렬
    for j in range(0,len(guest),2):                		# 0 ~ guest 길이만큼 2씩 증가해서 루프
        if guest[j] == guest[j+1]:                		# 짝수랑 홀수랑 같다면
            continue                         			# 계속
        else:                             			# 아니고
            if guest[j] == guest[j+2]:                 		# 처음꺼랑 세번째꺼 비교해서 같으면
                print("Case #" + str(i+1) + ": " + str(guest[j+1]))     # 두번째가 혼자왔다는 뜻
                break
            else:                             				# 또 아니면
                print("Case #" + str(i+1) + ": " + str(guest[j]))     	# 첫번째가 혼자왔다는 뜻
                break

결과는 런타임 에러^^

번역된 글 이해하기도 난해한데 런타임 에러까지 뜨고 ㅠ 런타임 에러는 이유도 안알려주니 뭐가 문제인지도 모르겠고 멘탈 와르르


이후 수정하면 올림


( 수 정 )

위에 소스코드는 str로 guest를 입력받아 리스트를 만들어 글자가 하나씩 들어가기 때문에 굳이 런타임 에러가 아니더라도 잘못된 소스코드였다.


import sys

count = 0
test = int(sys.stdin.readline().strip())

for i in range(test):
    human = int(sys.stdin.readline().strip())
    guest = list(map(int,sys.stdin.readline().strip().split()))
    for j in guest:
        for k in guest:
            if j == k:
                count += 1
        if count == 1:
            print("Case #" + str(i+1) + ": " + str(j))
            break
        else:
            count = 0

그 후 수정하면서 함수사용을 최소화 시키면서도 나름 코드를 줄인다고 줄여보았다.

하지만 무엇이 문제인지 틀렸다고 한다^^

 


( 2 차 수 정 )


import sys

count = 0
test = int(sys.stdin.readline().strip())

for i in range(test):
    human = int(sys.stdin.readline().strip())
    guest = list(map(int,sys.stdin.readline().strip().split()))
    for j in guest:
        for k in guest:
            if j == k:
                count += 1
        if count == 1:
            print("Case #%s: "%(str(i+1)) + str(j))
            count = 0
        else:
            count = 0

이건 또 맞았단다.

아니 혼자 온 사람이 여러명이라는 소리는 없었잖아;;; 문제 설명좀 ㅠ


화나서 이리저리 건들다 그냥 복붙했는데 갑자기 맞았습니다 떠서 당황함;;

어쨋든 맞았다니 된거 아니겠나