ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 백준 : 입출력과 사칙연산 2,588번, 곱
    코딩테스트/백준 2024. 1. 22. 11:47

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

    1. split을 사용하지 않고 두 줄에 걸쳐서 사용자의 입력을 받아야겠군.

    2. 근데 472*385 일의 자리에서 부터 하나씩 어떻게 곱하지?

    3. 예제 출력은 일의 자리부터 하나씩 출력하게 하면 될 거 같은데..


    [my_code]

    A = map(int,input())     # print에서 매번 int 쓰기 귀찮아서 붙였다.
    B = map(int,input())
    print(A*B)               # 이렇게 하면 오류가 나는 데 왜 나는지 모르겠다.


    [문제점]

    1. map을 저렇게 따로 선언했을 때, 왜 오류가 나는지 모름.

    2. 일의자리에서 백의 자리까지 하나씩 곱하는 방법을 모름.


    [문제점 해결]

    1. 해결하지 못함. 이해가 잘 안됨.

    2. 이 문제에서 입력할 A, B는 각각 472와 385로 정해져 있음.

    A= input()
    B= input()                    
    print(int(A)*int(B[2]))    # A와 B의 일의자리 곱셈 출력   472*5  
    print(int(A)*int(B[1]))    # A와 B의 십의자리 곱셈 출력   472*8    
    print(int(A)*int(B[0]))    # A와 B의 백의자리 곱셈 출력   472*3    
    print(int(A)*int(B))       # A와 B의 곱셈 출력            472*385
    #예제 출력
    472
    385
    2360
    3776
    1416
    181720


    [보너스]

    B1) 각각의 자리를 구한다음 다 더하면 어떨까? 동일하게 나올 걸 알았지만 신기하다.

    A= input()
    B= input()
    C = int(A)*int(B[2])         # A와 B의 일의 자리 곱셈 = C
    print(int(C))             
    D =  (int(A)*int(B[1]))*10   # A와 B의 십의 자리 곱셈 = D
    print(int(D))
    E =  (int(A)*int(B[0]))*100  # A와 B의 백의 자리 곱셈 = E
    print(int(E))
    print(int(C+D+E))            # 각각 결과값을 더한 값
    B1 예제출력
    472
    385
    2360
    37760
    141600
    181720

    B2) 좀 더 간단하게 할 수는 없을까? (feat. 반복문)    <참고사이트에서 오 더 간단하게 표현할 수 있구나 해서 해봄>

    A = input()
    B = input()
    for i in range(2,-1,-1):          # i = 2, 1, 0      
        print(int(A)*int(B[i]))       # B = 385 B[0]=5, B[1]=8, B=[2]=3
    print(int(A)*int(B))

    여기서 3번쨰 라인 for i range(0,3) 했으면 i = 0, 1, 2 값을 갖는다. 하지만 @@@ 중요해요.(제가 헷갈려서)

    for i range(0,3)을 하게 되면 B[0] = 5, A*B[0] 부터 하게 돼요.......(1)번

    (뭐가 이상한지 모르겠다구요?? 백준에 안올렸으면 저도 뭔지 모르고 넘겼을 거 같습니다. 오 출력되네 하면서..)

    (1)번의 경우 B의 백의 자리부터 곱한 값이 나오게 됩니다. 하지만 문제에서는 일의 자리부터 출력되어야 하죠 !

    따라서, A*B[2]를 할려면 역순으로 해야됩니다. 

    for i in range(2,-1,-1) :  <- 의 의미는 i = 2,1,0 입니다. range 역순해주는 건 range 괄호 맨뒤 -1입니다. 앞 두개는 범위@ 

    B2 출력예시
    472
    385
    2360
    3776
    1416
    181720


    [사용된 함수]

    1. for문 

    for 변수 in 리스트(또는 튜플, 문자열):
        수행할_문장1
        수행할_문장2
        ...
    for i in range(2,-1,-1):          # i = 변수, range범위     
        print(int(A)*int(B[i]))       # 수행할 문장 1

     

    2. range()

    range(1,11)     # 1,2,3,4,5,6,...10
    range(11,1,-1)  # 11,10,9,8,7,...2

     

     

    [참고사이트]

    *map

    https://dojang.io/mod/page/view.php?id=2286

    *for문

    https://wikidocs.net/22

     

    [문제를 마치며]
    한번에 안풀리니 안 찝찝하고 아주 좋다. 각 자리의 자리수를 어떻게 표현하는 지 배우고,

    for문 맛도 보고, range 역순 표현하는 방법도 맛보니 아주 괜찮다. 
    + 위 모든 정보는 잘못된 정보를 제공할 수 있으니, 공부에 참고만 부탁드립니다.
    + 틀린 부분 | 여기서 더 생각하면 좋을 부분도 댓글로 적어주시면 감사하겠습니다. 

Designed by Tistory.