[백준문제풀이] 3단계_반복문

2022. 9. 20. 01:21백준 문제 풀이/파이썬

1) 2738 (  ㅇ )  

>오답

가)

n=int(input())

print(n*1)
print(n*2)
print(n*3)
print(n*4)
print(n*5)
print(n*6)
print(n*7)
print(n*8)
print(n*9)

문제를 제대로 안읽음.(예제 출력을 제대로 확인)

나)+연산자를 활용해서 컴퓨터가 제대로 인식 못함. +대신에 ,를 써서 해결

N = int(input())

list_ = range(1,10)

for i in list_:
    print(N+"*"+i+"="+N*i)

>정답

가)그냥 단순식(좋은 정답은 아님)

a=int(input())

print(a,'*','1','=',a)
print(a,'*','2','=',2*a)
print(a,'*','3','=',3*a)
print(a,'*','1','=',4*a)
print(a,'*','1','=',5*a)
print(a,'*','1','=',6*a)
print(a,'*','1','=',7*a)
print(a,'*','1','=',8*a)
print(a,'*','1','=',9*a)

나)반복문 이용

N = int(input())

list_ = range(1,10)

for i in list_:
    print(N,"*",i,"=",N*i)

 

2)10950(   △  )

>오답

가)

a,b = list(map(int,input()))
T =int(input())

for c in a,b:
print(a+b)

나)

T=int(input())
a,b=map(int,input().split())

for i in range(0,T+1) :
    print(a+b)

▶결과가 2 2 2 2 2 아래로 찍힘. 

>정답

T=int(input())

for i in range(0, T) :
    a, b = map(int, input().split())
    print(a+b)

 

▶계산 결과값 출력이 각 연산 a+b를 해줄때마다 밑으로 붙는데 이렇게 나와도 백준에서 정답으로 인정해줌. 

▶오답코드와 비교해보면 a,b = map(int,input().split())의 위치에 따라 출력값이 달라지는 것을 알 수 있다. for문 안에 a,b를 해줘야 정답이 되는데 나)오답을 코드를 활용할 경우 for문보다 상위에 있어서 그런지 한번 찍으면 끝나버린다. 하지만 for하위에 작성해주니 한번씩 찍어볼 기회를 준다. 

 

3)8395()

>오답

가)

n = 0
add=add+1
for add in n:

print(add)

나)

N=int(input())

n=0

for i in range(N):
    n += 1

print(n)

▶근본 없는 코드... 우선 입력값이랑  더해줘야하는 값을 지정하는 것은 했는데, range의 범위를 잘못지정했고 for문안에 들어가는 계산 식도 잘못됐음. 저 코드로 가정해보면, N=2일때 for i in range(2)가되고 n은 0에 2를 더한 값인 2가 출력됨. 이렇게하면 사실상 for문안에 n += 1은 의미가 없음. 차라리 n에다가 i를 더해주는 것은 어떨까? 그러면 N= 4일때 for i in rang(4)가 되고 n은 0에 for문이 돌아가면서 0부터 찍힘. 0+0, 0+1, 0+2, 0+3과 같은식으로 range는 n-1 까지 찍히므로 합이 6이됨. 그럼 여기서 N+1까지 범위를 지정해준다면 정답.

>정답

N=int(input())

sum=0

for i in range(1, N+1):
    sum += i

print(sum)

 

4)25304(  x )

>오답

가)

a,b = list(map(int,input()))
for a,b in a,b:
if x=a*b and n=b
print(Yes),
else:
print(No)

나)

X=int(input())
N=int(input())

sum= 0
for i in range(N):
    a,b = map(int,input().split())
    sum += (a*b)
     
    if X == sum :
     print("Yes")
    else:
     print("No")

다)

X=int(input())
N=int(input())

sum= 0
for i in range(N):
    a,b = map(int,input().split())
    result = (a*b)
    sum += i+result

    if X == sum :
     print("Yes")
    else:
     print("No")

▶나)보다 발전한 것은 result를 따로 빼주고 그 값을 i에다 계속 더해주는 것. 근데 오류나는 것이 한번에 결과값만 출력하면 되는데 왜 각각 값으로 나오는 거지? if문 안에 for문을 넣어볼까?

라)

X=int(input())
N=int(input())

if X == sum:
    print("Yes")
    sum= 0
    for i in range(N):
        a,b = map(int,input().split())
        result = (a*b)
        sum += i+result

else:
    print("No")

▶바로 오류남. 26000이랑 4만 대입했는데 No라는 결과값이 나온다. 어디서 끊어야할 것인가...

>정답(구글링)

X=int(input())
N=int(input())
sum= 0


for i in range(N):
    a,b = map(int,input().split())
    result = (a*b)
    sum += result

if X == sum:
    print("Yes")
else:
    print("No")

▶if문을 아예 밑으로 빼줬다. 변수를 sum이라고 해줘서 맨 위로 뺐고, 그 변수(sum)의 첫값을 0으로 하고 돌면서 a*b의 값을 더해주는 느낌으로 풀어 나간듯하다. 

 

5)15552 ( x  )

-오답

손도 못댐

T =int(input())
A,B = map(int,input())

for i in range(T):
    result = A + B
    print(result)

 

-정답

import sys

T =  int(input())

for i in (range(1, T+1)) :
    a,b = map(int, sys.stdin.readline().split())
    print(a+b)

 

6)11021()

>오답

가)

T=int(input())
A,B=map(int,input().split())

for i in range(T+1):
    result = A+B

print(f"Case #{i}: {result}")

▶결과는 5 / 1 1 만 입력했는데 바로 Case #5 : 2 가 나온다. while로 돌리고 break로 깨줄까나...

나)

T=int(input())
A,B=map(int,input().split())

while True:
 for i in range(T+1):
     if i == T+1:
         break
     result = A+B

print(f"Case #{i}: {result}")

▶함수가 무한대로 들어간다;;; 환장하겄네... 

다)

T=int(input())
A,B=map(int,input().split())

while True:
 for i in range(T+1):
     result = A + B
     print(f"Case #{i}: {result}")
    if int(i) == int(T+1):
         break

▶계속 오류...

우선 for에서도 break 된다. 

for i in range(10000)

 print(i)

if i == 100:

 break

라)

T=int(input())
A,B=map(int,input().split())


for i in range(T+1):
 result = A + B
 print(f"Case #{i}: {result}")
 if i == T+1:
  break

▶5
1 1

입력하면 
Case #0: 2
Case #1: 2
Case #2: 2
Case #3: 2
Case #4: 2
Case #5: 2
가 나옴.
종료 코드 0(으)로 완료된 프로세스

>정답(구글링)

가)다른사람 블로그

T = int(input())

for i in range(1,T+1):
    a,b = map(int, input().split())
    print("Case #"+str(i)+':',a+b)

▶우선 a,b를 여러번 찍고 싶을 경우 맨위가 아니라 for문 안에 넣어줘야한다. for문 안에 있어야 i번만큼 input()할 수 있기 때문이다. 그리고 예제 출력에서 나온 값이 한번에 나오게 할 필요는 없고 입력할 때마다 그에 맞는 출력값이 나온다고해도 백준문제채점은 맞는답이라고 나온다. 

나)내가 쓴 것

T=int(input())

for i in range(T):
 A,B=map(int,input().split())
 print(f"Case #{i+1}: {A+B}")

 

7)11022( )

 

>정답

T= int(input())



for i in range(T):

A,B = map(int,input().split())

print(f"Case #{i+1}: {A} + {B} = {A+B}")

6)문제 응용

 

8)2438( )

 

>정답

N=int(input())



for i in range(1,N+1):

print('*'*i)

 

처음에 i를 곱해줘야 할 것을 바로 N곱했더니 밑에 입력값만큼의 별이 입력값 만큼 나왔다...

 

9)2439 ( )

 

>오답

N=int(input())



for i in range(1,N+1):

print(" "*(N-i),'*'*i)

출력값이 올바르지 않다고한다. 자세히보니 맨 앞에 한칸이 띄어진 것 같기도 하고.. 뭐가 문젤까.. 그래서 계산해보니 N-i+1을 해줬는데 이것도 안된다.

 

>정답(구글링)

 

구글링해보니 기한 함수?도 있다 rjust/ljust인데 공백주고 한쪽으로 정렬해주는 것!

n=int(input())

for i in reversed(range(n)):

print((i*' ').ljust(n,'*'))

 

10)10871 (     )

>오답

import random

N,X=map(int,input().split())

for i in range(N):
    if X < N:
        print(값)

>정답

N,X=map(int,input().split())
a=list(map(int,input().split()))
for i in range(N):
    if a[i] < X :
        print(a[i], end=" ")

11)10952(  )

>오답

가)

for i in range(0):
    a, b = map(int, input().split())

    if a==0 and b==0:
        break

▶for 함수는 끝이 있을때 사용, while 함수는 끝이 정해져 있지 않을때 무한이 돌때 사용

나)

while True:
    a,b=map(int,input().split())
    print(a+b)
    if a==0 and b==0:
        break

>정답

while True:
    a,b=map(int,input().split())
    if a==0 and b==0:
        break
    print(a+b)

▶while 문 쓸때 깨지는 조건을 먼저 써주고 그 조건에 해당되지 않을때는 어떻게할지 밑에 print() 해주는 것이 관건.

 

10951 ( x )

>오답

while True:
    a,b=map(int,input().split())
    print(a+b)

>정답

while True:
    try:
        a, b = map(int, input().split())
    except:
        break
    print(a+b)

▶숫자 입력안되서 에러 발생하면 반복문 끝내도록 try, except 사용 

1110(  x )

>오답

손도 못댐

>정답

N = int(input())  #입력받은 값을 int로 바꿈
num = N           #변하는 값
count = 0         #몇 번 사이클인지
 
while True:
    a = num//10
    b = num %10
    c = (a+b)%10
    num = (b*10) + c
    count += 1
    if(num == N):
        break
 
print(count)