Algorithm/String

[소프티어 7703번] X marks the Spot (한양대 HCPC 2023)

킹우현 2024. 6. 16. 14:40

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

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' 가 위치한 인덱스를 구하고, 두번째 문자열의 인덱스를 대문자로 변환한 뒤 모든 문자열들의 값들을 한줄로 이어서 출력하는 문제이다.

 

구현은 크게 어렵지 않아서 금방 제출하였는데, 시간초과가 발생하여 이를 해결하기 위한 여러가지 접근을 했었다.

  1. 'x'나 'X'가 문자열에 속해있는지 확인하기 위해 문자열/리스트가 아니라 집합(Set) 자료형의 in 연산자를 사용
  2. 특정 문자의 인덱스를 더 빠르게 찾기 위해 index() 함수가 아니라, find() 함수 사용
  3. 문자열을 더 빠르게 연결하기 위해 + 연산자가 아니라 "".join() 사용 ⭐️⭐️⭐️⭐️

처음에는 index() 함수가 문제인줄 알았는데, Chat GPT에 검색해본 결과 find() 함수와 성능에는 큰 차이가 없다고 한다.

 

대신에 하위 문자열이 없을 경우 예외 처리 유무의 차이가 있다고 한다 ..!

 

 

[코딩테스트 문제 풀이 전략] 시간 복잡도 / 시간 복잡도 줄이는 Tip

1. 시간 복잡도란 ? 코드를 실행하면 원하는 기능을 수행하고 종료되기까지 시간이 소요되는데, 이를 더 효율적이고 빠르게 작동시키고 싶다면 어느 알고리즘이 더 효율적인지 비교할 수 있는 '

woohyun-king.tistory.com

 

결론적으로, 본 문제의 핵심은 문자열을 합칠 때 문자열의 개수가 많다면 "".join() 을 사용하는 것이다 !