일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Python
- IBM
- Data Science
- 알고리즘
- 데이터과학
- 문자열
- 오블완
- 부스트캠프
- 프로그래머스
- softeer
- 코세라
- 클린코드 파이썬
- 코딩테스트
- Java
- 자바
- 데이터사이언스
- programmers
- 코테
- 소프티어
- Clean Code
- Boostcamp AI
- AI Mathematics
- 티스토리챌린지
- Coursera
- 파이썬
- data science methodology
- 깨끗한 코드
- 클린코드
- 데이터 사이언스
- string
- Today
- Total
떼닝로그
[Python] Softeer Lv2 - [한양대 HCPC 2023] X marks the Spot (Immutable String) 본문
[Python] Softeer Lv2 - [한양대 HCPC 2023] X marks the Spot (Immutable String)
떼닝 2024. 8. 4. 22:32[Python] Softeer Lv2 - [한양대 HCPC 2023] X marks the Spot
문제 링크 : https://softeer.ai/practice/7703
Softeer - 현대자동차그룹 SW인재확보플랫폼
softeer.ai
기록의 이유...
아무리 생각해도 뭔가 걸릴만한 게 없었는데, 자꾸만 시간 초과가 나서 어이가 없었다.
정말 쉬운 문제였어서...
결국 문제 질문/답변 게시판을 보게 되었는데,
Python의 String type은 IMMUTABLE하다는 것을 알게 되었다.
03) Immutable과 Mutable
[TOC] ## 파이썬 리스트를 그림으로 표현하기 다음 코드를 보고 메모리의 상태를 우선 그려봅시다. ``` >>> a = hello >>> b = [hello,…
wikidocs.net
이 글을 읽고 나니 확실히 이해가 됐다.
예전에 한번씩 파이썬에서 문자열 내의 캐릭터값을 변경하려고 했을 때 이런 것과 관련한 오류가 떴던 게 가물가물 기억이 나기도 했다.
이 또한, string은 변경할 수 없는 data type이므로 발생하는 에러였던 것...
예시를 먼저 확인해보자~~
# immutable한 String type의 += 연산
a = "Hello"
print(id(a)) # a의 주소값 출력, 4334229232
a += " World"
print(id(a)) # a의 주소값 출력, 4335936880
# mutable한 List type의 append 연산
list1 = ["Hello"]
print(id(list1)) # list1의 주소값 출력, 4347844672
list1.append("World")
print(id(list1)) # list1의 주소값 출력, 4347844672
immutable한 type은 애초에 기존의 값을 바꿀 수도 없지만,
추가적인 연산을 진행할 때에는 기존에 사용하던 객체가 아닌, 새로운 객체를 만듦으로써 값을 변수에 넣어준다는 것.
연산을 진행한 뒤의 주소가 달라졌다는 것으로 이를 확인할 수 있다.
반면에 muttable한 type들은 동일한 객체에 값을 추가하고 빼고 등을 진행한다는 것이 차이가 된다.
그러면 이것을 해결하기 위해서는 어떻게 해야 하는가?
-> list 등의 mutable한 객체에 값을 추가하고, 이를 string 처럼 보이도록 값을 내보내는 방법.
-> 나는 list에 값을 넣고, 최종적으로 ''.join(list1) 이런 식으로 진행함으로써 string처럼 보이도록 했다.
아무튼~
이것 때문에 매번 객체를 신규 생성함으로써 시간 초과가 발생했던 것 같다.
수정하니깐 시간 초과 바로 해결~
(베이스 코드는 과외하는 친구가 적은 것 좀 뽀려봤슴다,,,)
수정 전)
import sys
input = sys.stdin.readline
num_words = int(input())
result = ""
for i in range(num_words):
x = list(map(str, input().split()))
for j in range(len(x[0])):
if x[0][j] in {"x", "X"}:
result += x[1][j].upper()
break
print(result)
수정 후)
import sys
input = sys.stdin.readline
num_words = int(input())
result = []
for i in range(num_words):
x = list(map(str, input().split()))
for j in range(len(x[0])):
if x[0][j] in {"x", "X"}:
result.append(x[1][j].upper())
break
print(''.join(result))
작은 값이 들어왔을 땐 크게 차이를 못 느낄 수도 있지만,
큰 값이 들어왔을 때나, 작업이 크게 진행될 땐 영향이 크다는 것을 확인할 수 있다.
아무튼 이런 게 있었다~
쉬운 문제지만 이런 작은 부분들도 간과하면 안된다는 것을 알 수 있다.
으음...
하지만 인간은 똑같은 실수를 반복하곤 하지... ㅎㅎㅎㅎㅎㅎ
그걸 방지하기 위해 적는 글이었습니당
끗!
'Algorithms > Softeer' 카테고리의 다른 글
[Java] Softeer 바이러스 (자료형 관리) (5) | 2024.10.31 |
---|---|
[Java] Softeer 금고 털이 (HashMap) (2) | 2024.10.31 |
[Java] Softeer 나무 공격 (배열) (2) | 2024.10.31 |
[Java] Softeer 나무 출력 - (출력 문자열 포함, StringBuilder) (4) | 2024.10.24 |
[Java] Softeer 메리 크리스마스 - (출력 문자열 포함) (0) | 2024.10.24 |