본문 바로가기
Algorithm/구현

[Python3] 백준 1357번 뒤집힌 덧셈

by HANNI하니 2023. 1. 9.

1357번: 뒤집힌 덧셈 (브론즈1)

문제

 

1357번: 뒤집힌 덧셈

어떤 수 X가 주어졌을 때, X의 모든 자리수가 역순이 된 수를 얻을 수 있다. Rev(X)를 X의 모든 자리수를 역순으로 만드는 함수라고 하자. 예를 들어, X=123일 때, Rev(X) = 321이다. 그리고, X=100일 때, Rev(

www.acmicpc.net

정답

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] = 리스트 거꾸로 이젠 외우자...


레퍼런스

  • 다른 풀이 참고
 

[백준][solved.ac][Bronze 1][Python] 1357번 : 뒤집힌 덧셈

밑의 링크는 백준에서의 문제 링크입니다. 1357번: 뒤집힌 덧셈 어떤 수 X가 주어졌을 때, X의 모든 자리수가 역순이 된 수를 얻을 수 있다. Rev(X)를 X의 모든 자리수를 역순으로 만드는 함수라고 하

brightnightsky77.tistory.com

  • 정답 깃허브
 

GitHub - yyeongeun/codingtest: 코딩테스트 공부

코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.

github.com

 

댓글