-
구현 알고리즘 : 문자열 재정렬 - 파이썬 (python)알고리즘/구현 2021. 6. 23. 20:41
- 입력 조건
첫째 줄에 하나의 문자열 S가 주어집니다. (1 ≤ S의 길이 ≤ 10,000)
- 출력 조건
첫째 줄에 문제에서 요구하는 정답을 출력합니다.
- 테스트케이스
K1KA5CB7 → ABCKK13
AJKDLSI412K4JSJ9D → ADDIJJJKKLSS20
* 방법 1 : 직접 구현한 방법
(1) for문으로 문자열에서 숫자인 경우를 찾고 숫자의 합을 s_num 변수에 저장
(2) 숫자가 아닌 문자인 경우 문자를 아스키코드 값으로 변환 (ord) 후 ascii_result 변수에 저장
(3) 아스키코드 값을 기준으로 오름차순 정렬 (.sort)
(4) 정렬한 아스키코드 값을 다시 문자로 변경 (chr) 후 하나의 문자열로 합치기
(5) 합친 문자열 끝에 숫자의 합 (s_num) 합치기
# 방법 1 s = input() length = len(s) s_num = 0 result = "" ascii_result = [] for i in range(length): # 숫자인 경우 if str.isdigit(s[i]): s_num += int(s[i]) # 숫자 합 # 알파벳인 경우 else: ascii_result.append(ord(s[i])) # 아스키코드 값으로 변환 후 저장 ascii_result.sort() # 아스키코드 값 기준 오름차순 정렬 for i in ascii_result: result += chr(i) # 아스크코드 값을 문자로 변경 후 문자열 합치기 if s_num != 0: # 문자열에 숫자가 하나라도 존재하는 경우 result += str(s_num) # 문자열 끝에 숫자 결과값 합치기 print(result)
* 방법 2 : 교재 해설
리스트에서 .sort로 문자열 정렬이 바로 가능! . . .
분명 되는지 테스트 해보고 안돼서 문자 → 아스키코드 → 문자로 변환했는데 착각했나보다 (⊙_⊙;)
아스키코드 값으로 변환하여 따로 저장하는 과정이 불필요
# 방법 2 data = input() result = [] value = 0 # 문자를 하나씩 확인하며 for x in data: # 알파벳인 경우 결과 리스트에 삽입 if x.isalpha(): result.append(x) # 숫자는 따로 더하기 else: value += int(x) # 알파벳을 오름차순으로 정렬 result.sort() # 숫자가 하나라도 존재하는 경우 가장 뒤에 삽입 if value != 0: result.append(str(value)) # 최종 결과 출력 (리스트를 문자열로 변환하여 출력) print(''.join(result))
https://github.com/501501/codingTest/blob/master/%EA%B5%AC%ED%98%84/A08.py
'알고리즘 > 구현' 카테고리의 다른 글
구현 알고리즘 : 자물쇠와 열쇠 - 파이썬 (python) (0) 2021.07.06 구현 알고리즘 : 문자열 압축 - 파이썬 (python) (0) 2021.06.24 구현 알고리즘 : 럭키 스트레이트 - 파이썬 (python) (0) 2021.06.23 구현 알고리즘 : 게임 개발 - 파이썬 (python) (0) 2021.06.23 구현 알고리즘 : 왕실의 나이트 - 파이썬 (python) (0) 2021.04.03