1357번: 뒤집힌 덧셈 (브론즈1)
문제
정답
X[::-1]을 사용하면 되는 문제
[::-1]가 reverse라는 것을 또 잊어버리고, 어렵게 풀어버렸다 ㅠㅠ 맞췄으니 올려는 본다...
(내 정답1 풀이) 정답2로 먼저 맞추고, 이를 함수화한게 정답1이다.
X의 첫 숫자(왼쪽, 가장 큰 숫자)부터 작은 자릿수를 곱해주는 형식으로 reverse 했다.
!유의할 점!
1. X입력값이 숫자라서 len이 안된다는 점! 그래서 range 범위를 지정해줄때, range(len(str(X))로 해줘야한다.
2. xx 연산을 먼저 해주고 x에 10을 곱해주어야 한다. x=1일 때, 즉 일의 자리일때를 고려해야하기 때문
3. 함수의 입력값은 str이고, 결과값 Xans은 숫자이다. 그렇기 때문에 숫자인 Rev(X)+Rev(Y) 값을 다시 str 형태로 만들어주어야 함수를 오류없이 통과할 수 있다.
# 내 정답1
X,Y = input().split()
# 순서 뒤집어서 자리수 곱해주기
def Rev(X):
Xans = 0
x = 1
for i in range(len(str(X))):
xx = int(X[i])*x
Xans += xx
x *= 10
return Xans
print(Rev(str(Rev(X)+Rev(Y))))
# 내 정답2
X,Y = input().split()
# 반대 순서대로 자릿수 곱해주기
Xans = Yans = XYans = 0
x = y = xy = 1
for i in range(len(X)):
xx = int(X[i])*x #자릿수 곱해주기
x *= 10 #자릿수 *10
Xans += xx #전부 더해주기
for i in range(len(Y)):
yy = int(Y[i])*y
y *= 10
Yans += yy
# 두 값을 더한 값에 똑같은 방식으로 rev 구하기
XY = list(str(Xans + Yans))
for i in range(len(XY)):
xyxy = int(XY[i])*xy
xy *= 10
XYans += xyxy
print(XYans)
<내가 생각하지 못한 아이디어>
1. X[::-1]...............!
2. str 형태여야 인덱싱이 가능하다.
str 형태로 입력하여 인덱싱한 후에 int으로 바꾸어 연산. 다시 입력값으로 넣을 땐 str 형태로 바꾸기.
# 보통 사람들의 정답
X,Y = map(str,input().split())
S = str(int(X[::-1]) + int(Y[::-1]))
print(int(S[::-1])
# 위의 방식을 함수화한 정답
X, Y = input().split()
def Rev(X):
X = int(X[::-1])
return X
print(Rev(str(Rev(X)+Rev(Y))))
제출 결과를 보면, 위에서 부터 [--:-1]을 사용한 정답, 내정답1, 내정답2이다.
근데 예상외로 [::-1]를 사용한 정답이 시간이 4ms 더 많이 든다. 코드 길이는 압도적으로 짧다.
내 정답들은 구조가 같아서 그런지, 함수화 한거랑 안한 거랑 시간이 똑같이 든다.
공부한 내용
X[::-1] = 리스트 거꾸로 이젠 외우자...
레퍼런스
- 다른 풀이 참고
- 정답 깃허브
'Algorithm > 구현' 카테고리의 다른 글
[프로그래머스 lv1] 크기가 작은 부분 문자열 (1) | 2023.01.25 |
---|---|
[Python3] 백준 1373번 2진수 8진수 (0) | 2023.01.10 |
[Python3] 백준 1356번 유진수 (0) | 2023.01.09 |
[Python3] 백준 1296번 팀 이름 정하기 (0) | 2023.01.06 |
[Python3] 백준 1292번 쉽게 푸는 문제 (0) | 2023.01.05 |
댓글