📌 풀이
나를 매우 괴롭게 한 쌍의 합
다른 것보다 출력값이 매우 매우 까다로웠다.
첫째 줄에 테스트 케이스의 수를 입력하면 그 수 만큼 입력할 수 있다.
앞의 수가 뒤의 수와 같거나 더 큰 경우는 출력하지 않는다.
2처럼 같은 수의 쌍만 나오는 경우 역시 출력하지 않는다.
2가지 풀이로 풀어보았다.
✅ 코드
test_case = int(input())
for _ in range(test_case) :
val = int(input())
i = 1
li = []
while True :
if i < val-i :
li.append([i, val-i])
i += 1
else :
break
print("Pairs for", val, end="")
print(": ", end="")
for i in range(len(li)):
print(*li[i], end="")
if i == len(li) - 1:
break
print(', ', end="")
print()
노가다 형태로 풀었던 1번째 방법
test_case 입력 후 그만큼 for문을 돌려준다.
다음 입력 값을 받고, 쌍의 합을 리스트로 받기로 했다.
i=1, li=[]로 기본 세팅 후 while문을 돌려주어 앞이 작을 경우에만 i, val-i를 리스트에 추가했다.
그리고 i += 1을 하여 앞이 크거나 같을 경우에는 break를 걸어준다.
출력 시에는 Pairs for 2: 이런 모양을 만들기 위해 문자와 val을 같이 받아주고 다음 이어질 ':'은 end=''로 붙여줬다.
그 다음 값은 한 칸 띄고 쌍의 합이 나오기 때문에 콜론 뒤에 스페이스바를 한 번 눌러준다.
즉 지금까지 작성한 출력 값은 Pairs for _: __ 이런 형태다.
li에 담겨 있던 것들을 for문으로 꺼내줄 건데, 몇 번 하느냐면 li의 길이만큼 해준다.
[] 형태로 출력되는 것은 *을 통해 언패킹 해주면 된다.
지금까지 Pairs for n: n n 까지 만들었다.
다음 쌍이 오기 전 ,가 나오고 m m이 나오게 하려면 print(', ', end='')를 하면 된다.
단 이렇게 하면 마지막 출력값에도 , 가 붙어서 나온다.
이를 해결하기 위해 i == len(li) -1로 마지막 녀석을 잡고 얘는 break를 걸어준다.
이후 출력하게 만들면 되는데 마지막 문제는 출력값 옆에 입력을 받게 된다는 것이다.
그래서 마지막 print()로 개행을 해주면 된다.
매우 길지만 해보면 무슨 말인지 알 수 있다.
그럼 이제 2번째 풀이... ^^
test_case = int(input())
for i in range(test_case) :
num = int(input())
print(f'Pairs for {num}:', end=' ')
for i in range(1, num//2+1) :
if i < num-i :
if i != 1 :
print(',', end=' ')
print(i, num-i, end='')
print()
test_case로 받고 for문 돌리는 것까지 똑같다.
num으로 수를 받는데 출력 할 때 f string을 써보았다.
f' ' << 해당 공백 안에 원하는 출력값을 다 넣되 num는 {}를 쳐준다.
이렇게 하면 'Pairs for 3: ' 이런 식으로 출력된다.
이후 for문은 1부터 (num//2)+1 의 형태로 돌린다.
그럼 1부터 num//2까지 도니까 반까지 가면 i가 num-i보다 크지 않다.
if문으로 한 번 돌려주고 출력하면 아까 위에서와 같이 마지막 쌍의 합에도 ,가 붙어 나오는 문제가 발생한다.
i가 1이라면 i, num-i가 출력된다. 이후는 i != 1 이기 때문에 ,가 앞에만 붙는다.
1 8, 2 7, 3 6, 4 5
이렇게 앞에만 붙고 마지막에는 붙지 않는 형식이 된다.
여기서 키포인트는 num//2+1까지 for문을 돌리는 것과 f string, if문 출력 값이다.
다른 것보다 출력값이 까다로워서 매우 고생했는데 풀다 보니 2가지 방식으로 풀게 되었다.
어렵지만 성장했다!!!
'🥧 Python > ⚙️ 코딩테스트' 카테고리의 다른 글
[백준-Python] 6749번: Next in line (0) | 2023.03.08 |
---|---|
[백준-Python] 5522번: 카드 게임 (0) | 2023.03.07 |
[백준-Python] 4892번: 숫자 맞추기 게임 (0) | 2023.03.06 |
[백준-Python] 4562번: No Brainer (0) | 2023.03.06 |
[백준-Python] 4101번: 크냐? (0) | 2023.03.06 |