백준 문제 풀이 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
이건 또 맞았단다.
아니 혼자 온 사람이 여러명이라는 소리는 없었잖아;;; 문제 설명좀 ㅠ
화나서 이리저리 건들다 그냥 복붙했는데 갑자기 맞았습니다 떠서 당황함;;
어쨋든 맞았다니 된거 아니겠나