몸과 마음이 건전한 SW 개발자

Softeer Level 2 X marks the Spot {언어 : Python} 본문

알고리즘

Softeer Level 2 X marks the Spot {언어 : Python}

스위태니 2024. 2. 13. 23:20

문제 링크

https://softeer.ai/practice/7703

 

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

 

softeer.ai

정답 코드

import sys
input = sys.stdin.readline
result = []
N = int(input())
for _ in range(N):
    left, right = input().split()
    # 앞 뒤에서 동시에 탐색
    # 앞 탐색
    lenLeft = len(left)
    for idx in range(lenLeft):
        if left[idx] in ("x", "X"):
            result.append(right[idx].upper())
            break
        if left[lenLeft-idx-1] in ("x", "X"):
            result.append(right[lenLeft-idx-1].upper())
            break
            
print("".join(result))

풀이 방법

  1. 왼쪽과 오른쪽 문자열을 가지고 "x"나 "X"가 있는지 확인한다.
  2. 계속 시간초과가 나길래 앞 뒤에서 확인해줬다.
  3. result에 대문자로 바꾼 알파벳 또는 숫자를 넣어주었다.
    1. result에 값을 넣어준 이유
      1. result += 알파벳으로 할 경우 계속해서 새로운 문자열을 만들어야 할 뿐더러 문자열의 길이에 따라서 시간이 증가하게 된다 즉 O(N)의 시간복잡도를 가진다.
      2. result.append(알파벳)의 경우 리스트의 맨 마지막 열에 알파벳이 저장되므로 O(1)의 시간복잡도를 가진다.

느낀점

  • 기존에 문자 관련 문제는 result += 형태로 풀었는데 앞으로는 result라는 빈 리스트에 저장하는 방식을 사용할 생각이다.