📚문제
📝풀이
# 26350 Good Coin Denomination (좋은 액면가, 위대한 액면가)
n = int(input())
cnt = 0
for _ in range(n):
coin_list = list(input().split())
result = ' '.join(coin_list[1:])
for i in range(1, len(coin_list[1:])):
if int(coin_list[i]) * 2 > int(coin_list[i+1]):
cnt += 1
if cnt >= 1:
print(f'Denominations: {result}')
print('Bad coin denominations!')
print('')
else:
print(f'Denominations: {result}')
print('Good coin denominations!')
print('')
1. 입력받은 숫자들을 리스트로 만들고 (coin_list)
2. 첫번째 숫자를 제외한 나머지 화폐 종류들 중에서(coin_list[1:])
3. 액면가가 좋지 않은 경우 (coin_list[i] * 2 > coin_list[i+1]) 가 존재할 때
cnt +=1
4. 화폐 종류들 중에서 한 번이라도 액면가가 좋지 않으면 cnt가 1 이상이니까
cnt >= 1이상일 때 'Bad'출력
아니면 'Good'출력
왜 틀렸는지 모르겠다
그냥 틀렸습니다 라고만 뜨니까.....
{result}출력할 때 str타입이라 그런가 해서
int 타입으로 변경해서 출력해봤는데도 안 되네
+
for _ in range(int(input())) :
N, *D = map(int, input().split())
res = False
for i in range(1, N) :
if (D[i-1] << 1) > D[i] :
break
else : res = True
print("Denominations:", *D)
print(["Bad coin denominations!", "Good coin denominations!"][res], '\n')
구글링해서 나온 단 하나의 파이썬 코드....
Chat GPT의 도움을 받아서
1. for _ in range(int(input())) :
- 사용자로부터 입력을 받아 정수로 변환하고, 그 값을 범위로 하는 루프를 돌립니다. _는 루프 변수를 사용하지 않겠다는 의미입니다.
2. N, *D = map(int, input().split())
- 사용자로부터 입력을 받아 공백을 기준으로 나누어 리스트로 만듭니다. 첫 번째 값은 N에 할당하고 나머지는 D 리스트로 할당합니다.
3. res = False
- res 변수를 선언하고 False로 초기화합니다.
4. for i in range(1, N) :
- 1부터 N-1까지의 숫자를 순회하는 루프를 시작합니다.
5. if (D[i-1] << 1) > D[i] :
- 현재 인덱스의 이전 값의 두 배가 현재 값보다 큰지를 검사합니다. 만약 크다면 아래 코드를 실행하게 됩니다.
6. break
- if 문의 조건이 참이면, 루프를 빠져나갑니다.
7. else : res = True
- 루프를 빠져나가지 않고 끝까지 순회했을 경우, res를 True로 설정합니다.
8. print("Denominations:", *D)
- 현재 화폐 단위 리스트 D를 출력합니다.
9. print(["Bad coin denominations!", "Good coin denominations!"][res], '\n')
- res 값에 따라서 리스트 [False, True]에서 해당하는 문장을 출력합니다.
즉, "Bad coin denominations!" 또는 "Good coin denominations!" 중 하나를 선택하여 출력합니다.
어렵다...
우선 여기서 얻을 수 있는 개념은
1. *
여러 개의 숫자를 입력 받을 때 문자열 앞에 *를 설정하면 몇개가 되든 받아서 리스트로 만들 수 있다
2. else : res = True
for문을 돌 때 if문에서 한 번도 참이 되지 않아서 루프를 빠져나가지 못했을 때
res = True로 설정
특이한 점은 if와 같은 줄이 아니라 for와 같은 줄에 else를 설정
else 문이 for 문과 같은 줄에 있는 이유는 파이썬의 문법 구조 때문입니다.
파이썬에서는 for문에 else문을 사용할 수 있습니다.
for 루프가 정상적으로 끝나면(즉, break 등으로 중간에 끊기지 않으면) else 블록이 실행됩니다.
이것은 주로 특정 조건이 만족되지 않았을 때 추가적인 동작을 수행할 때 유용합니다.
따라서 이 코드에서 else: res = True는 for 루프가 끝까지 돌고 나서,
즉 모든 i에 대해 (D[i-1] << 1) > D[i] 조건이 만족되지 않았을 때 실행됩니다.
이것은 "좋은 화폐 단위"로 판별하는 것입니다.
하나 배웠다
3. print(['Bad coin denominations!', 'Good coin denominations!'][res],'\n')
['Bad','Good']이 들어간 리스트 생성
[res]값에 따라
1) True(=1)일 때 => 'Good'
2) False(=0)일 때 => 'Bad'
True와 False의 0과1 Boolean값과 리스트 인덱싱을 활용한 기막힌 해법...
'Python(알고리즘,문제풀이) > BOJ (Bronze IV)' 카테고리의 다른 글
백준 27213번 /Граничные клетки(경계 셀?) - 파이썬 (1) | 2023.10.18 |
---|---|
백준 27110번 / 특식 배부 - 파이썬 (0) | 2023.10.18 |
백준 24365번 / ПЧЕЛИЧКАТА МАЯ(여왕벌 마야) - 파이썬 (0) | 2023.09.26 |
백준 24356번 / ЧАСОВНИК(시계) - 파이썬 (0) | 2023.09.26 |
백준 24263번 / 알고리즘 수업 - 알고리즘의 수행 시간 2 - 파이썬 (0) | 2023.09.23 |