[프로그래머스 | Swift | Lv.0] 대소문자 바꿔서 출력하기

Juhee Kim·2025년 4월 2일
0

알고리즘 풀이

목록 보기
2/2
post-thumbnail

https://school.programmers.co.kr/learn/courses/30/lessons/181949


풀이 1: 오류

let s1 = readLine()!

let upper = "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z".split(separator: " ")
let lower = "a b c d e f g h i j k l m n o p q r s t u v w x y z".split(separator: " ")
var result = ""

for j in 0..<s1.count {
    for i in 0..<upper.count {
        if Character(upper[i]) == Character(s1[j]) {
            result.append(lower[i])
        } else if Character(lower[i]) == Character(s1[j]) {
            result.append(lower[i])
        }
    }
}

print(result)

문제점

  1. 문자열 인덱싱 문제
    Swift에서는 String 타입의 인덱싱이 직접적으로 지원되지 않는다. s1[j]와 같은 방식으로 문자열의 특정 위치에 접근할 수 없다.
    문자열의 특정 위치에 접근하려면 String.Index를 사용해야 한다.

  2. Substring을 Character로 변환 시도
    Character(upper[i])Character(lower[i])에서 upper와 lower는 [Substring] 타입이므로, 각 요소는 Substring 타입이다.
    Substring을 직접 Character로 변환하는 것은 불가능하므로 먼저 String으로 변환한 후 Character로 변환해야 한다.

  3. 비효율적인 알파벳 생성 방식
    알파벳을 공백으로 구분된 문자열로 정의하고 split을 사용하는 것은 비효율적이다. 더 직관적인 방법으로는 문자 배열을 직접 정의하거나 ASCII 값을 활용하는 방법이 있다.


풀이 2

import Foundation

let s1 = readLine()!

let upper = Array("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
let lower = Array("abcdefghijklmnopqrstuvwxyz")
var result = ""

for c in s1 {
    if let index = upper.firstIndex(of: c) { // 대문자인 경우
        result.append(lower[index]) // 소문자로 반환
    } else if let index = lower.firstIndex(of: c) { // 소문자인 경우
        result.append(upper[index]) // 대문자로 반환
    } else {
        result.append(c)
    }
}

print(result)

설명

  • 대소문자 알파벳 배열을 만들어 주어진 문자열을 for문으로 확인해가며 한 글자씩 변경한다.
  • if let 구문을 사용한 이유는 firstIndex의 반환값이 nil 인 경우도 있기 때문이다. (해당 문제에는 nil인 경우가 없지만)

풀이 3: 최종 코드

import Foundation

let s1 = readLine()!
var result = ""

for c in s1 {
    if c.isUppercase {
        result.append(c.lowercased()) // 대문자면 소문자로 변경
    } else {
        result.append(c.uppercased()) // 소문자면 대문자로 변경
    }
}

print(result)

설명

  • 알파벳 배열을 직접 만들지 않고 isUppercase 내장 속성을 사용해 대소문자 판별
  • lowercased(), uppercased() 내장 메서드 사용해 대소문자 변경

👉 스위프트다운 코드 완성


매번 헷갈리던 Substring에 대한 포스트는 따로 적어두었다.
https://velog.io/@juhee-dev/Swift-문법-Substring-이해하기

profile
개: 개롭지만 발: 발전하는중

0개의 댓글

관련 채용 정보