4015 : 자릿수 교체
•시간제한: 1.000 S
•메모리제한: 256 MB
•제출: 170
•통과: 66
•만든사람: suakii
문제 설명
정수 $N$과 두 위치 $A, B$가 주어졌을 때, $N$의 왼쪽에서부터 $A$번째 자릿수와 $B$번째 자릿수를 서로 바꾼 결과를 구하는 프로그램을 작성하시오.
교체 후 결과 정수 앞에 오는 $0$은 제거해야 합니다. (예:
[제약 조건]
• $10 \le N \le 10^8$
• $1 \le A < B \le (N\text{의 자릿수 개수})$
• $N, A, B$는 정수
[💡 단계별 해결 힌트]
1. 문자열을 리스트로 변환하기:
• 파이썬의 문자열은 글자를 직접 바꿀 수 없으므로(불변 객체),
• 예:
2. 파이썬의 0번 인덱스 주의:
• 문제의 $A$번째, $B$번째는 1부터 세므로, 리스트에서의 실제 인덱스는
3. 두 자릿수 맞교환(Swap):
•
4. 다시 합치고 앞의 0 제거하기:
•
교체 후 결과 정수 앞에 오는 $0$은 제거해야 합니다. (예:
0123 → 123)[제약 조건]
• $10 \le N \le 10^8$
• $1 \le A < B \le (N\text{의 자릿수 개수})$
• $N, A, B$는 정수
[💡 단계별 해결 힌트]
1. 문자열을 리스트로 변환하기:
• 파이썬의 문자열은 글자를 직접 바꿀 수 없으므로(불변 객체),
list(s)를 사용하여 한 글자씩 분리된 리스트로 만듭니다.• 예:
digits = list(str(N)) → ['1', '0', '2', '4', '3']2. 파이썬의 0번 인덱스 주의:
• 문제의 $A$번째, $B$번째는 1부터 세므로, 리스트에서의 실제 인덱스는
A - 1과 B - 1입니다.3. 두 자릿수 맞교환(Swap):
•
digits[A - 1], digits = digits, digits[A - 1] 형태로 두 자리를 손쉽게 맞바꿉니다.4. 다시 합치고 앞의 0 제거하기:
•
"".join(digits)로 문자열을 다시 합친 뒤, int()로 감싸면 앞자리 0이 깔끔하게 제거된 정수가 됩니다! (예: print(int("".join(digits))))입력 설명
첫째 줄에 정수 $N$과 두 위치 $A, B$가 공백으로 구분되어 주어집니다.
출력 설명
$A$번째와 $B$번째 자릿수를 교체한 정수를 출력합니다.
입력 예시
COPY
복사되었습니다!
복사되었습니다!
10243 2 5
출력 예시
COPY
복사되었습니다!
복사되었습니다!
13240
도움
[💡 핵심 코드 가이드]
•
•
•
•
•
•
s, a, b = input().split()•
digits = list(s) (리스트로 변환해야 자릿수 교체가 가능합니다)•
a, b = int(a) - 1, int(b) - 1 (0-based 인덱스 변환)•
digits[a], digits = digits, digits[a] (맞교환)•
print(int("".join(digits))) (정수 변환으로 앞자리 0 자동 제거)