데이터 코딩랩

백준 2908 파이썬 상수 _ join, reversed 추가 이론 본문

Algorithm/백준

백준 2908 파이썬 상수 _ join, reversed 추가 이론

researcher 틴틴 2025. 4. 16. 11:35

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