import sys
# 1. n개의 문자열쌍(S,T)이 주어지는데, 각 쌍에 대해서 S와 T의 길이는 같다
# 2. S에서 글자 x 또는 X가 등장하는 위치를 P라고 한다.(유일)
# 3. 이때 T의 P번째 글자를 읽는다.(소문자는 대문자로 변환)
input = sys.stdin.readline
N = int(input())
answer = []
for _ in range(N):
str1, str2 = input().split()
str1_set, str2_set = set(str1), set(str2)
x_index = -1
X_index = -1
if 'x' in str1_set:
x_index = str1.find('x')
elif 'X' in str1_set:
X_index = str1.find('X')
if x_index != -1:
answer.append(str2[x_index].upper())
else:
answer.append(str2[X_index].upper())
print("".join(answer))
이번 문제는 첫번째 문자열의 'x'나 'X' 가 위치한 인덱스를 구하고, 두번째 문자열의 인덱스를 대문자로 변환한 뒤 모든 문자열들의 값들을 한줄로 이어서 출력하는 문제이다.
구현은 크게 어렵지 않아서 금방 제출하였는데, 시간초과가 발생하여 이를 해결하기 위한 여러가지 접근을 했었다.
- 'x'나 'X'가 문자열에 속해있는지 확인하기 위해 문자열/리스트가 아니라 집합(Set) 자료형의 in 연산자를 사용
- 특정 문자의 인덱스를 더 빠르게 찾기 위해 index() 함수가 아니라, find() 함수 사용
- 문자열을 더 빠르게 연결하기 위해 + 연산자가 아니라 "".join() 사용 ⭐️⭐️⭐️⭐️
처음에는 index() 함수가 문제인줄 알았는데, Chat GPT에 검색해본 결과 find() 함수와 성능에는 큰 차이가 없다고 한다.
대신에 하위 문자열이 없을 경우 예외 처리 유무의 차이가 있다고 한다 ..!
결론적으로, 본 문제의 핵심은 문자열을 합칠 때 문자열의 개수가 많다면 "".join() 을 사용하는 것이다 !
'Algorithm 💡 > String' 카테고리의 다른 글
[프로그래머스] JadenCase 문자열 만들기 (0) | 2024.01.05 |
---|---|
[백준 5052번] 전화번호 목록 (0) | 2023.12.13 |
[프로그래머스] 옹알이(2) (0) | 2023.07.22 |
[프로그래머스] 문자열 나누기 (0) | 2023.07.21 |
[프로그래머스] 문자열 밀기 (0) | 2023.07.21 |