ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 백준 : 반복문 모음집
    코딩테스트/백준 2024. 1. 27. 15:50

    # 2,739 : 구구단

    [문제 풀기 전 생각한 부분]

    1. (사용자로부터 입력 받은 숫자 고정) * (1~9) = 결과
    [my_code]

    N = int(input())       # 입력 받고             
    for i in range(1,10):  # 1,2,3,4,5,..8,9
        print("{0} * {1} = {2}".format(N,i,N*i))


    [문제점]

    1. 분명히 잘 돌아가는 데 안된다. 검색을 해봐도 모르겠다.. 

    2. 질문 게시판에 들어가보니 나랑 같은 케이스가 있었는 데, 예제랑 똑같이 나와야한다. 
    [문제점 해결]

    1. 예제랑 똑같이 나오기 위해 공백을 이용했다. 

    (before) print("{0}+{1}={2}".format(N,iN*i))

    (after)    print("{0} + {1} = {2}".foramt(N,i,N*i))

    # 10,950 : A + B - 3 

    [문제 풀기 전 생각한 부분]

    1. A + B 문제인데 -3은 왜 있는거지?
    [my_code]

    T = int(input())
    for i in range(T):                   # range(T) -> ex) T = 5,  T=0,T=1,T=2,T=3,T=4 총 5번반복 
        A,B = map(int,input().split())   # A,B를 입력 받고 
        print(A+B)                       # A+B를 출력한다.


    [문제점]

    1. 원래는 Line 2 에 A,B = map(int,input().split())을 넣었는 데 안됐다.

    2. 그럼 for문에 넣어볼까?
    [문제점 해결]

    1. 결론적으로 for문에도 input()을 넣어도 됐었다. 

     

    [B1] 한번에 입력을 받고 한번에 출력하려면?

    # 방법 1
    def main():
        # 테스트 케이스의 개수 T를 입력받습니다.
        T = int(input("테스트 케이스의 개수를 입력하세요: "))
    
        # 각 테스트 케이스에 대한 입력을 저장할 리스트를 초기화합니다.
        test_cases = []
    
        # 테스트 케이스의 개수만큼 입력을 받습니다.
        for _ in range(T):
            # 각 테스트 케이스에서 두 정수 A와 B를 입력받고 리스트에 추가합니다.
            A, B = map(int, input("두 정수를 입력하세요: ").split())
            test_cases.append((A, B))
    
        # 입력받은 테스트 케이스에 대해 결과를 출력합니다.
        for A, B in test_cases:
            # A와 B를 더한 값을 계산하고 결과를 출력합니다.
            print(A + B)
    
    # 프로그램을 실행합니다.
    if __name__ == "__main__":
        main()
    
    # 방법 2
    def main():
        # 테스트 케이스의 개수와 각 테스트 케이스에 대한 입력을 한 번에 받습니다.
        test_cases = [tuple(map(int, input().split())) for _ in range(int(input("테스트 케이스의 개수를 입력하세요: ")))]
    
        # 각 테스트 케이스에 대해 결과를 출력합니다.
        for A, B in test_cases:
            # A와 B를 더한 값을 계산하고 결과를 출력합니다.
            print(A + B)
    
    # 프로그램을 실행합니다.
    if __name__ == "__main__":
        main()

    # 8,393 : 합

    [문제 풀기 전 생각한 부분]

    1. 입력받고

    2. 저장할 공간 만들어주고 

    3. range(n+1) n번 더해서 반복해주면 되겠다. 
    [my_code]

    n = int(input())      # 입력 받고
    sum = 0               # Line 4를 위해 하나 만들어주고
    for i in range(n+1):  # n이 아니라 n+1한 이유는 Line4에서 더해줄건데..n=5이면0,1,2,3,4 4까지만더함. 
        sum += i          # sum = sum + i / 
        print(sum)        # 출력


    [문제점]

    1. 결과값 6만 나와야 하는 데 그 과정이 전부 다 나오게 된 것이 문제다. 

    2. 문제에 1부터 n까지 합이라고 나와 있다.

    3  # 입력값
    0  # i=0일때
    1  # i=1
    3  # i=2
    6  # i=3


    [문제점 해결]

    1. for 문 안에 print가 존재해서 줄 맞춤하고 빼주었다. 내가 볼 땐 같은 내용인데 상당히 중요한 포인트같다.

    2. range(1,n+1)로 수정

    n = int(input())
    sum = 0
    for i in range(1,n+1):
        sum += i
       
    print(sum)

    # 8,393 : 영수증 

    [문제 풀기 전 생각한 부분]

    1. A+B-3 문제처럼 for문안에 input을 넣어야겠다.

    2. 그리고 if 문으로 처리해야지.

    [my_code]

    stuff = int(input())               # 물건 총 금액 stuff
    N = int(input())                   # 구매한 물건의 종류의 수 N
    for i in range(N):                 # N번 반복
        a,b = map(int,input().split()) # 물건 가격 a와 개수 b를 공백을 두고 받는다.
    if stuff == a*b:                   # 만약 stuff(물건 총금액) = a*b 
        print("Yes")                   # Yes 출력
    else:                              # 그 외 No 출력
        print("NO")


    [문제점]

    1. 단순히 물건의 개수가 1개라면 되겠지만 그 이상이라면 안된다.

    2. 8393의 합 문제 처럼 물건 종류의 수 N만큼 더해줘야한다.
    [문제점 해결]

    1. Line 9 에서 total += a*b를 해주므로 해결

    stuff = int(input())
    N = int(input())
    
    total = 0
    
    for i in range(N):
        a, b = map(int, input().split()) # a: 상품의 가격, b: 상품의 수량
        total += a * b                   # total = total + a * b
    
    if total == stuff:                       # total이 stuff와 같다면
        print("Yes")
    else:
        print("No")

    [느낀점]

    백준 기본 문제 총 집합 시켜놓은 듯한 문제이다.

    # 25,314 : 코딩은 체육과목 입니다

    [문제 풀기 전 생각한 부분]

    1. 4의 배수마다 long이 나 

    [my_code]

    N = int(input())          # 입력 받고 ~
    res=''                    # 저장될 공간
    for i in range(N//4+1):   # N//4+1 => N / 4 = x...y(x = 몫, y=나머지) x+1 / if N=4 i = 0,1,2
        res = "long " * i     # long * 0 , 1
    
    print(res+"int")


    [문제점]

    none
    [문제점 해결]

    none

    # 15,552 : 빠른 A+B

    [문제 풀기 전 생각한 부분]

    1. input() 대신 sys.stdin.readline()을 쓰면 좀 더 빠르게 출력하고 출력시간을 단축시키는구나.

    2. rstrip()은 뭐지.. 

    3. 나머지는 원래 했던거 처럼 하면 되겠다.

    [my_code]

    import sys                                                 # sys 모듈 읽어들이기
    T = int(sys.stdin.readline().rstrip())                     # input()과 사용방식 동일
    for i in range(T):
         a,b = map(int,sys.stdin.readline().rstrip().split())
         print(a+b)

     

    [문제점or배운점]

    # sys.stdin.readline()
    # 이 입력함수는 한 줄에 여러 입력 값을 받을 수 있다.        
    # 사용하기 위해선 import sys 모듈을 불러야함.
    # readline()은 개행문자(줄 바꿈문자)를 포함하고 있음. (\n)
    # 그래서 문자열 마지막에 개행문자가 포함되어 출력됨.
    # rstrip() : 오른쪽 공백을 삭제
    # lstrip() : 왼쪽 공백을 삭제
    # strip() : 왼,오 공백을삭제


    [참고사이트]

    https://yang-wistory1009.tistory.com/54

    # 11,021 : A + B -7

    [문제 풀기 전 생각한 부분]

    1. 여태 배운거 하면 되겠는데..

    2. import sys도 사용해봐야겠다. 
    [my_code]

    # code 1
    T = int(input())                          # 입력받고 ~
    for i in range(1,T+1):                    # Case #1부터~ Case #T 까지 의미임 
        A, B = map(int,input().split())       # A B값 받아주고
        print("Case #{}: {}".format(i,A+B))   # print 해준다.
        
    # code 2
    import sys
    T = int(sys.stdin.readline().rstrip())                    
    for i in range(1,T+1):
        A, B = map(int,sys.stdin.readline().rstrip().split())
        print("Case #{}: {}".format(i,A+B))


    [문제점]

    1. for문 자동완성 없이 작성할 때 : 까먹지 말자

    2. map() 할 때도 구분자인 split()까먹지 말자.

    # 11,022 : A + B -8

    [문제 풀기 전 생각한 부분]

    1. 11,021 문제랑 똑같다.
    [my_code]

    import sys
    T = int(sys.stdin.readline().rstrip())   # 입력받으면서 오른쪽 공백 삭제.
    for i in range(1,T+1):
        A, B = map(int,sys.stdin.readline().rstrip().split())
        print("Case #{}: {} + {} = {}".format(i,A,B,A+B))   # print 해준다.

    # 2,438 : 별 찍기 - 1

    [문제 풀기 전 생각한 부분]

    1. 코딩은 체육과목입니다. 문제랑 같음.
    [my_code]

    N = int(input())
    for i in range(1,N+1):
        star = "*" * i
        print(star)

    # 2,439 : 별 찍기 - 2

    [문제 풀기 전 생각한 부분]

    1. reverse나 뭐 이런 단축키 없나?

    2. 그냥 노가다인가 
    [my_code]

    N = int(input())
    
    # sol 1 : 1부터 N까지를 기준으로 진행
    for i in range(1,N+1):
        print(" "*(N-i)+"*"*i)
    # sol 2 : 0부터 N-1까지를 기준으로 진행
    for i in range(N):						
        print(" "*(N-i-1) + "*"*(i+1))
    # sol 3 : 전체 N에서 오른쪽 정렬을 하는 .rjust(N) 사용
    for i in range(N):						
        star = "*"*(i+1)
        print(star.rjust(N))


    [문제점or배운점]

    • 전체가 n 이라고 할 때 각 위치 정렬 함수
    
    	오른쪽 정렬 : .rjust(n)
    	가운데 정렬 : .center(n)
    	왼쪽 정렬  :  .ljust(n)


    [참고사이트]

    https://velog.io/@hrzo1617/%EB%B0%B1%EC%A4%80-2439-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%B3%84-%EC%B0%8D%EA%B8%B0-2

    [Bonus]

    B1

    입력예제)
    5
    
    출력예제)
    *****
    ****
    ***
    **
    *

     

    N = int(input())
    for i in range(N,0,-1):    # N~1까지 / -1: 역순
        star = "*" * i
        print(star)

    # 10,952 : A + B - 5

    [문제 풀기 전 생각한 부분]

    1. A + B는 쉬운 데, 여러개의 테스트 케이스는 몇개지? 입력의 마지막에 0 0 을 주면 끝내는 걸 만들어야되나

    [my_code]

    for i in range(81):                 # range(81)의 이유 : 0<A,B<10 이라 총 81의 경우의 수 존재한다고 생각했음.
        A,B = map(int,input().split())  # A,B 입력을 받고
        res = A+B                       # A + B = res
        if res==0:                      # res == 0인 경우는 둘다 0 인 경우 뿐.
             print("")
        else:                           # 나머지의 경우에는 A + B 를 한다.
            print(res)


    [문제점]

    1. range(81)까지이니 81번 까지 할것이다.

    2. res == 0 이면 끝나야 하는 데 " " 값을 출력한다.
    [문제점 해결]

    while True:                         # while True : 무한히 반복하는 무한 루프
        A,B = map(int,input().split())  # 입력받고
        if A==0 and B==0:               # A=0 이면서 B=0일 때 / and
            break                       # 무한루프 break 끝냄.
        else:
            print(A+B)                  # 그 외 A+B를 출력.

    [참고사이트]

    https://pythonmaster.tistory.com/32

    *while 문에 대한 설명

    https://wikidocs.net/21

    #10,951 : A + B - 4

    [문제 풀기 전 생각한 부분]

    1. 무한히 반복하면 되니깐 반복값이 정해져있는 for문보단 while문을 활용

    2. A+B-5 문제에서 break 부분을 빼면되겠다. 
    [my_code]

    # 1번째 시도
    while True:
        A,B = map(int,input().split())
        print(A+B)
        
    # 2번째 시도
    import sys
    while True:
        A,B = map(int,sys.stdin.readline().split())
        print(A+B)

    [문제점]

    1. 맞은 거 같은데 "런타임 에러 (EOFError)"가 떴다.

    2. 그러면 input()을 sys.stdin.readline()으로 바꾸면 효과가 있으려나?

    3. 바꾸어도 "런타임 에러(ValueError)"가 떴다. 

    [문제점 해결]

    1. try-except 구문을 활용 : 예외 처리를 위한 구문이다. 

    2. try 블록 안에 실행할 코드를 넣고, 예외가 발생할 경우 except 블록에서 처리

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

    [참고사이트]

    https://it-plus.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%AC%B8%EB%B2%95-2-3-%EB%B0%98%EB%B3%B5%EB%AC%B8-while%EB%AC%B8-break-try-except-%EC%B4%88%EB%B3%B4%EC%9A%A9-%EC%A7%88%EB%AC%B8%EC%9C%BC%EB%A1%9C-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94

     

    [파이썬 문법] 2-3. 반복문 - while문(break, try-except)[초보용] - 질문으로 공부하는

    오늘.ssam) 지난 2-2에서는 for문-break-continue에 대해서 알아보았습니다. 오늘은 또 다른 반복문 while에 대해서 알아보려 합니다. Q1.나) while문에 대해서 설명해 주세요 A1.ssam) while문은 1)조건식이 참(T

    it-plus.tistory.com

     

    [반복문을 마치며]

    이렇게 풀면서 감을 익히고 감 조금 익히면 기술면접 대비식으로 풀이 하겠습니다. 


    + 위 모든 정보는 잘못된 정보를 제공할 수 있으니, 공부에 참고만 부탁드립니다.

    + 틀린 부분 | 여기서 더 생각하면 좋을 부분도 댓글로 적어주시면 감사하겠습니다.

Designed by Tistory.