-
[파이썬/Python] 백준 10430번(나머지) 단계별로 풀어보기 + [결과값끼리 같은지 확인하기(feat. 귀차니즘)]깜빡의 취미/파이썬을 합니다. 2021. 7. 11. 12:30728x90
문제는 아래와 같다.
앞선 문제들을 잘 풀었다면 어렵지 않게 해결할 수 있는 문제이다. 마찬가지로 map(int, input(). split())를 이용하면 된다. 자세한 설명은 아래의 링크를 참고하길 바란다.
추가로 자세히 언급하지 않았던 부분인데, split 함수는 두 개 이상의 입력값을 구분할 수도 있다. 기본형 split()이라면 스페이스 바나 tap 등의 공백을 기준으로 나뉜다. 즉 a, b, c 세 개의 값을 구분하고 싶다면, 아래와 같이 적어주면 된다.
a, b, c = int(map, int(input().split()) 또는 a, b, c = input().split()
혹시라도 감이 오신 분들은 이제 문제로 돌아가시길. 그렇지 못한 분들을 위해 답안 예시들을 빠르게 공유해 본다.
[답안 예시1] A,B,C = input().split() a = int(A) b = int(B) c = int(C) print((a+b)%c) print(((a%c)+(b%c))%c) print((a*b)%c) print(((a%c) * (b%c))%c)
[답안 예시2] a,b,c =map(int,input().split()) print((a+b)%c) print(((a%c)+(b%c))%c) print((a*b)%c) print(((a%c) * (b%c))%c)
그런데 그냥 개인적인 호기심으로, 문제를 다시 접근해 보기로 했다. 문제에서 제시하고 있는 결괏값들은 정말 같은 걸까? 수학을 잘 못하는 필자로서는 확인하기가 어렵다고 느꼈다. 귀찮기도 하다. 그래서 if문을 활용하여 실제로 같은지 확인해 보기로 했다.
어렵지 않다. if문에 부합한다면 "그렇네요."를 출력하고, 그렇지 않다면 "아닌데여?"를 출력해 본다. 우선 입력값에 따라 반응하는 식이다. 알아야 하는 값이 두 개이기 때문에, 별개의 if문을 사용할 수밖에 없었다.
[예시1] a,b,c =map(int,input().split()) print((a+b)%c) print(((a%c)+(b%c))%c) print((a*b)%c) print(((a%c) * (b%c))%c) if (a+b)%c == ((a%c)+(b%c))%c: print("그렇네요.") else: print("아닌데여?") if (a*b)%c == ((a%c) * (b%c))%c: print("그렇네요.") else: print("아닌데여?")
or을 사용하면 둘 중 하나만 맞아도 "그렇네요."가 나올테니, 원하는 결과에 부합하지 않는다.
[안 좋은 예시1] if (a+b)%c == ((a%c)+(b%c))%c or if (a*b)%c == ((a%c) * (b%c))%c: -> 둘 중 하나만 맞으면 print("그렇네요.") -> "그렇네요."를 출력해 주세요. else: -> 아니면 print("아닌데여?") -> 이걸로!
그렇다고 elif를 사용할 수도 없다. if 함수는 첫 if문이 맞다면, 아래의 elif문까지 검토하지 않기 때문이다.
[안 좋은 예시2] a,b,c =map(int,input().split()) print((a+b)%c) print(((a%c)+(b%c))%c) print((a*b)%c) print(((a%c) * (b%c))%c) if (a+b)%c == ((a%c)+(b%c))%c: print("그렇네요.") elif (a*b)%c == ((a%c) * (b%c))%c: print("그렇네요2") else: print("아닌데여?") [안 좋은 출력 2] 10 10 3 2 2 1 1 그렇네요. -> "그렇네요2"는 검토되지도 않았다.
그런데, 너무 길다.
너무 긴 코드를 보면 입에 가시가 돋는 병에 걸렸기 때문에, 다시 접근해 보기로 했다. 군더더기를 줄이기 위해 "그렇네요." 외의 정보는 필요 없다고 판단했다. else에 정보가 없다면, 따로 적어 주지 않아도 식은 성립한다.[예시2] a,b,c =map(int,input().split()) print((a+b)%c) print(((a%c)+(b%c))%c) print((a*b)%c) print(((a%c) * (b%c))%c) if (a+b)%c == ((a%c)+(b%c))%c: print("그렇네요.") if (a*b)%c == ((a%c) * (b%c))%c: print("그렇네요2")
아무리 짧더라도 보기 싫은 코드는 별로인 법이다. 이번에는 중복되는 녀석들을 한 데 모아 보기로 했다.
[예시3] a,b,c =map(int,input().split()) d = (a+b)%c e = ((a%c)+(b%c))%c f = (a*b)%c g = ((a%c)*(b%c))%c print(d) print(e) print(f) print(g) if d == e: print("그렇네요.") if f == g: print("그렇네요2")
생각해 보니 어차피 문제와 너무 멀어져 버렸다. 그냥 각 결과값을 출력하는 부분도 지워 보았다.
[예시3] a,b,c =map(int,input().split()) d = (a+b)%c e = ((a%c)+(b%c))%c f = (a*b)%c g = ((a%c)*(b%c))%c if d == e: print("그렇네요.") if f == g: print("그렇네요2")
개인적으로 생각하는, 가장 짧게 10430번 문제에서 질문하고 싶었던 내용을 확인할 수 있는 식이 나왔다.
이런저런 시도를 하다 보면, 언젠가는 새로운 문제를 보더라도 막힘 없이 풀 수 있는 때가 오리라고 믿는다. 그때까지, 파이팅!
'깜빡의 취미 > 파이썬을 합니다.' 카테고리의 다른 글
[파이썬/Python] 백준 1330번(두 수 비교하기) 단계별로 풀어보기 (0) 2021.07.25 [파이썬/Python] 백준 2588번(곱셈) 단계별로 풀어보기 + [문제 완벽 재현! 문제처럼 결과값들 출력하기] (2) 2021.07.18 [파이썬/Python] 백준 10869번(사칙연산) - 단계별로 풀어보기 + [간단한 오류 잡기(feat. 나눗셈)] (0) 2021.07.04 [파이썬/Python] 백준 1008번(A/B) - 단계별로 풀어보기 + [오류 발생시키기에 대한 간단한 언급] (2) 2021.06.27 [파이썬/Python] 백준 10998번(AxB) - 단계별로 풀어보기 + [오류 발생으로 조건 명시하기] (2) 2021.06.21