데이터 코딩랩
백준 2908 파이썬 상수 _ join, reversed 추가 이론 본문
https://www.acmicpc.net/problem/2908
📄 실전 문제 접근 체크리스트
1초, 128MB
1단계: 문제 파악
☑️ 문제 요구사항 한 줄로 정리
: 세 자리 수 두개, 큰 수 말하
☑️ 예제 입력/출력 확인
: 입력 → 세 자리 수 두개
: 출력 → 거꾸로 읽은 후 큰 수 출력
추가)
2단계: 입력 범위 → 시간복잡도 판단
입력 크기 (N) 적정 알고리즘 복잡도
☑️ 입력 크기 체크 후 -> 내가 쓸 수 있는 알고리즘 선별
→ 세 자리 큰 수 두 개
→ 인덱싱만 하면 되니까 O(1) 라고 봐도 되는지?
→
추가)
3단계: 알고리즘 유형 선택
☑️ 문자열 처리
4단계: 자료구조 & 흐름 정리
☑️ 어떤 자료구조를 쓸까?
→ 문자열 인듯, 뒤집기,
☑️ 함수 나눌 필요 있는가?
→ 없음
☑️ 조건 분기 많을까? 시뮬레이션 필요한가?
→ 없음
☑️ 흐름 : input 사용해서 공백으로 구분
5단계: 구현 전 체크
☑️ 입출력 방식은?
→ map 사용, 공백으로 구분, 문자열 뒤집기, 더 큰 수 읽기
☑️ 예외 상황은 어떤 게 있을까? (빈 입력, 중복 등)
→ 0 미포함, 같지 않은 세 자리 수라니까 예외 없는듯
☑️ 시간 초과 가능성은?
→ 없는듯
6단계: 제출 전 체크리스트
☑️ 예제 출력 전부 통과했는가?
☑️ 문제 조건 중 빠뜨린 거 없는가?
☑️ 반복문/조건문 이상한 부분 없는가?
☑️ 시간/메모리 초과 가능성 없나?
추가)
✔️
✔️
✔️
내 코드
A,B = input().split()
A = ''.join(reversed(A))
B = ''.join(reversed(B))
print(max(A,B))
반성) int 처리를 안함
근데 왜 int 처리를 안했어도 정답 처리가 되었는가?
--> 3자리 수 고정이라는 조건 때문에 가능 했던 것
최적화 된 답
A, B = input().split()
A = int(''.join(reversed(A)))
B = int(''.join(reversed(B)))
print(max(A, B))
# A = reversed(A) 만 쓰면 안되고 ''.join() 을 써야하는 이유
reversed(A)는 리스트나 문자열이 아님!
→ "iterator(반복자)" 객체라서 바로 출력하거나 계산에 못 씀
→ 그래서 join()으로 문자열로 다시 묶어줘야 사용 가능
예제)
A = "123"
print(reversed(A)) # ❌
출력)
<reversed object at 0x...> ← 사람이 읽을 수 없음
→ reversed(A)는 **"뒤집힌 문자열의 주소 정보"**만 담고 있음
→ 실제 문자로 보이거나 출력되지 않음
해결방법 : join() 으로 묶기
A = "123"
A_rev = ''.join(reversed(A))
print(A_rev) # ✅ 출력: 321
✔️ reversed(A)는 문자 하나씩 거꾸로 순회하게 해주고
✔️ ''.join(...)은 그 문자들을 다시 하나로 이어 붙여 문자열로 만듦
+) 추가 팁 : 리스트에서는 어떻게?
L = [1, 2, 3]
print(list(reversed(L))) # ✅ [3, 2, 1]
→ 리스트는 list()로 감싸서 바로 사용 가능!
근데 문자열은 join()을 써야 제대로 **"하나의 문자열"**로 묶여서 출력됨.
+) 구분자
A = "abc"
print(''.join(reversed(A))) # 출력: cba
print('-'.join(reversed(A))) # 출력: c-b-a
print(' '.join(reversed(A))) # 출력: c b a
'Algorithm > 백준' 카테고리의 다른 글
백준 1427 파이썬 소트인사이드 (0) | 2025.04.16 |
---|---|
백준 2750 파이썬 수 정렬하기 (0) | 2025.04.16 |
백준 1152 파이썬 단어의 개수 (0) | 2025.04.16 |
백준 2675 파이썬 문자열 반복 (0) | 2025.04.15 |
백준 10809 파이썬 알파벳 찾기 (0) | 2025.04.15 |