2438
문제 | 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 |
입력 | 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다. |
출력 | 첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다. |
답 | import sys a = int(sys.stdin.readline()) for i in range(a): print('*'*(i+1)) |
input 대신 int(sys.stdin.readine()) 쓰기
2439
문제 | 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오. |
입력 | 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다. |
출력 | 첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다. |
답 | import sys a = int(sys.stdin.readline()) for i in range(a): print(' '*(a-i-1)+'*'*(i+1)) |
5를 입력했다고 했을 때
별1 -> 공백 a-1 = 4
별2 -> 공백 a-2 = 3
별3 -> 공백 a-3 = 2
별4 -> 공백 a-4 = 1
별5 -> 공백 a-5 = 0
'' * (a-(i+1))를 별 앞에 붙여주자!
10871
문제 | 정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오. |
입력 | 첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000) 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다. |
출력 | X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. X보다 작은 수는 적어도 하나 존재한다. |
답 | import sys n,x = map(int, sys.stdin.readline().split()) a = list(map(int, sys.stdin.readline().split())) for i in range(n): if a[i] < x: print(a[i], end=' ') |
a를 map, list를 이용해서 list로 받아오자!
그리고 for문으로 돌려서 a[i]보다 작은거를 찍어주는데
그냥 찍으면 한개씩 개행되거 찍히니까
end=' '를 이용해서 한칸씩 띄고 찍히게 하자!
10952
문제 | 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. |
입력 | 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10) 입력의 마지막에는 0 두 개가 들어온다. |
출력 | 각 테스트 케이스마다 A+B를 출력한다. |
답 | import sys while True: a, b = map(int, sys.stdin.readline().split()) if a==0 and b==0: break else: print(a + b) |
뭔가 for로는 못할 것 같은데 다른 반복문을 이용해야 될 것 같아서 while을 구글링 해봤다.
https://wikidocs.net/21#_1
무한 루프
이번에는 무한 루프(Loop)에 대해 알아보자. 무한 루프란 무한히 반복한다는 의미이다. 우리가 사용하는 일반 프로그램 중에서 무한 루프 개념을 사용하지 않는 프로그램은 거의 없다. 그만큼 자주 사용한다는 뜻이다.
파이썬에서 무한 루프는 while문으로 구현할 수 있다. 다음은 무한 루프의 기본 형태이다.
while True:
수행할 문장1
수행할 문장2
...
while문의 조건문이 True이므로 항상 참이 된다. 따라서 while문 안에 있는 문장들은 무한하게 수행될 것이다.
다음의 무한 루프 예이다.
>>> while True:
... print("Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.")
...
Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.
....
위 문장은 영원히 출력된다. 하지만 이 예처럼 아무 의미 없이 무한 루프를 돌리는 경우는 거의 없을 것이다. [Ctrl+C]를 눌러 빠져나가자.
그렇다고 한다!
무한루프를 이용해보자!
a랑 b가 0일때는 아무것도 출력하지않고 끝내고
그 외에는 a+b를 프린트해야하니까!
두둥!!
10951
문제 | 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. |
입력 | 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10) |
출력 | 각 테스트 케이스마다 A+B를 출력한다. |
답 | import sys while True: try: a, b = map(int,sys.stdin.readline().split()) print(a+b) except: break |
위에랑 비슷하지만 에러가 나면 종료가 되게 하기 위해 try, except문을 사용했다.
아무것도 입력하지 않고 enter를 누르면 오류가뜨는데 이때 except로 break를 걸어서 종료시켜줬다.
1110
문제 | 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자. 26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다. 위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다. N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오. |
입력 | 첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다. |
출력 | 첫째 줄에 N의 사이클 길이를 출력한다. |
답 | import sys x = int(sys.stdin.readline()) count = 0 new = 0 num = x if x<10: x*10 while True: if num//10 + num%10 < 10: new = (num%10)*10 + (num//10 + num%10) count += 1 num = new if x == new: break else: new = (num%10)*10 + (num//10 + num%10)%10 count += 1 num = new if x == new: break print(count) |
이건 너무 어려웠다ㅜㅜ 그래도 어쩌겠습니까 해봐야죠...!!
일단 x를 받아와서 만약 x를 10으로 나눈 몫과 나머지의 합이 10보다 작을때랑 클때를 나눠서 하자고 생각했다.
import sys
x = int(sys.stdin.readline())
num = 0
if x//10 + x%10 < 10:
num = (x%10)*10 + (x//10 + x%10)
else:
num = (x%10)*10 + (x//10 + x%10)%10
print(num)
# 29 입력 -> 91 출력
이 과정을 반복해주면 되는것이 아니겠는가...!!!
while을 이용해서 반복을 해줘보자
x와 num이 같을 때 까지 반복을 시켜주자
그리고 count를 줘서 숫자를 세보자
import sys
x = int(sys.stdin.readline())
num = 0
count = 0
while True:
if x//10 + x%10 < 10:
num = (x%10)*10 + (x//10 + x%10)
count += 1
if x == num:
break
else:
num = (x%10)*10 + (x//10 + x%10)%10
count += 1
if x == num:
break
print(count)
이렇게 했더니 멈추질 않는다... 계속 돌고있다....
왜냐면 엉망진창이기때문^_^
하하 보면 if x==num:이 되어야 break타고 나오는데
쟤네가 지금 같을 수가 없다.
x는 넣어줬을때 그 값 그대로고, num도 저 값이 변하게 하는 코드를 입력한게 없다..
야무지게 다시 고쳐보자.
새로운 값을 저장할 new를 만들어주고
가장 중요한거!! 초기 입력한 x 값이 나중에 변하지 않게 하기 위해
num을 만들어줘서 x를 넣어준다.
왜냐면 계속 반복하다보면 x값이 변할텐데
나중에 처음값과 일치해야 break로 빠지기 때문에 처음 값을 가지고 있어야한다!
import sys
x = int(sys.stdin.readline())
new = 0
count = 0
num = x
while True:
if x//10 + x%10 < 10:
new = (x%10)*10 + (x//10 + x%10)
count += 1
x = new
if num == new:
break
else:
new = (x%10)*10 + (x//10 + x%10)%10
count += 1
x = new
if num == new:
break
print(count)
그래서 new, count, num을 주고
while문을 돌린다.
new값 생기고, x에 new를 넣어줘서 다시 돌리는거다!
그러다가 초기값x인 num과 new가 같아지는 지점까지 돌리다가 같아지면 break!!
이렇게 하고 돌리니까 26 입력하면 4 나오고, 71입력하면 12 잘 나오는데
x 값이 10보다 작을때는 코드를 안짰다!!
import sys
x = int(sys.stdin.readline())
count = 0
new = 0
num = x
if x<10:
x*10
while True:
if num//10 + num%10 < 10:
new = (num%10)*10 + (num//10 + num%10)
count += 1
num = new
if x == new:
break
else:
new = (num%10)*10 + (num//10 + num%10)%10
count += 1
num = new
if x == new:
break
print(count)
얼른 넣어주기~!
휴 오래걸렸다!!
하지만 백준에 들어가니
n = int(input())
num = n
cnt = 0
while True:
a = num // 10
b= num % 10
c= (a + b) % 10
num = (b * 10) + c
cnt += 1
if(num == n):
break
print(cnt)
이렇게 간단하게 짜신 분도 계시더라..!!
간단해......
'알고리즘 > 백준' 카테고리의 다른 글
함수(15596, 4673, 1065) (0) | 2022.09.07 |
---|---|
1차원 배열(10818, 2562, 3052, 1546, 8958, 4344) (0) | 2022.09.06 |
반복문(2739, 10950, 8393, 25304, 15552, 11021, 11022) (0) | 2022.09.03 |
조건문(1330, 9498, 2753, 14681, 2884, 2525, 2480) (0) | 2022.09.02 |
입출력과 사칙연산(18108, 3003, 10430, 2588, 10171, 10172, 25083) (0) | 2022.09.01 |
댓글