프로그래머스 입문문제

[프로그래머스 입문문제] Day 15 문자열, 해시, 배열, 수학

Devleoper_yh 2025. 2. 4. 23:33
반응형

1. 영어가 싫어요

영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.


제한사항

  • numbers는 소문자로만 구성되어 있습니다.
  • numbers는 "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" 들이 공백 없이 조합되어 있습니다.
  • 1 ≤ numbers의 길이 ≤ 50
  • "zero"는 numbers의 맨 앞에 올 수 없습니다.

입출력 예

numbers result
"onetwothreefourfivesixseveneightnine" 123456789
"onefourzerosixseven" 14067

입출력 예 설명

입출력 예 #1

  • "onetwothreefourfivesixseveneightnine"를 숫자로 바꾼 123456789를 return합니다.

입출력 예 #1

  • "onefourzerosixseven"를 숫자로 바꾼 14067를 return합니다.

제출 답안

import Foundation

func solution(_ numbers: String) -> Int {
    // 영어로 된 숫자 문자열을 실제 숫자로 변환하는 매핑 딕셔너리
    let s1: [String: String] = [
        "zero": "0", "one": "1", "two": "2", "three": "3",
        "four": "4", "five": "5", "six": "6", "seven": "7",
        "eight": "8", "nine": "9"
    ]

    // 변환할 문자열을 변수로 저장
    var result = numbers
    
    // 딕셔너리의 키(영어 숫자)를 순회하면서 실제 숫자로 변환
    for (word, digit) in s1 {
        result = result.replacingOccurrences(of: word, with: digit)
    }
    
    // 변환된 문자열을 Int 타입으로 변환하여 반환 (변환 실패 시 0 반환)
    return Int(result) ?? 0
}

 

https://developer.apple.com/documentation/foundation/nsstring/1412937-replacingoccurrences

 

replacingOccurrences(of:with:) | Apple Developer Documentation

Returns a new string in which all occurrences of a target string in the receiver are replaced by another given string.

developer.apple.com

 


2. 인덱스 바꾸기

문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때, my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.


제한사항

  • 1 < my_string의 길이 < 100
  • 0 ≤ num1, num2 < my_string의 길이
  • my_string은 소문자로 이루어져 있습니다.
  • num1  num2

입출력 예

my_string num1 num2 result
"hello" 1 2 "hlelo"
"I love you" 3 6 "I L veoyou"

입출력 예 설명

입출력 예 #1

  • "hello"의 1번째 인덱스인 "e"와 2번째 인덱스인 "l"을 바꾸면 "hlelo"입니다.

입출력 예 #2

  • "I love you"의 3번째 인덱스 "o"와 " "(공백)을 바꾸면 "I l veoyou"입니다.

제출 답안

import Foundation

func solution(_ my_string: String, _ num1: Int, _ num2: Int) -> String {
    // 문자열을 문자 배열로 변환
    var charArray = Array(my_string)

    // 두 문자 스왑
    charArray.swapAt(num1, num2)

    // 배열을 문자열로 변환 후 반환
    return String(charArray)
}

 

https://developer.apple.com/documentation/swift/array/swapat(_:_:)

 

swapAt(_:_:) | Apple Developer Documentation

Exchanges the values at the specified indices of the collection.

developer.apple.com


3. 한 번만 등장한 문자

문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.


제한사항

  • 0 < s의 길이 < 1,000
  • s는 소문자로만 이루어져 있습니다.

입출력 예

s result
"abcabcadc" "d"
"abdc" "abcd"
"hello" "eho"

입출력 예 설명

입출력 예 #1

  • "abcabcadc"에서 하나만 등장하는 문자는 "d"입니다.

입출력 예 #2

  • "abdc"에서 모든 문자가 한 번씩 등장하므로 사전 순으로 정렬한 "abcd"를 return 합니다.

입출력 예 #3

  • "hello"에서 한 번씩 등장한 문자는 "heo"이고 이를 사전 순으로 정렬한 "eho"를 return 합니다.

제출 답안

import Foundation

func solution(_ s: String) -> String {
    // 문자별 등장 횟수를 저장할 딕셔너리 생성
    var s1: [Character: Int] = [:]
    
    // 문자열을 순회하며 각 문자의 등장 횟수를 카운트
    for char in s {
        s1[char, default: 0] += 1
    }
    
    // 한 번만 등장하는 문자만 필터링
    let uniqueChar = s1.filter { $0.value == 1 }.map { $0.key }
    
    // 한 번만 등장하는 문자를 사전 순으로 정렬
    let sortedUniqueChar = uniqueChar.sorted()
    
    // 배열을 문자열로 변환하여 반환
    return String(sortedUniqueChar)
}

 

Feat.ChatGPT...


4. 약수 구하기

정수 n이 매개변수로 주어질 때, n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ n ≤ 10,000

입출력 예

 

n result
24 [1, 2, 3, 4, 6, 8, 12, 24]
29 [1, 29]

입출력 예 설명

입출력 예 #1

  • 24의 약수를 오름차순으로 담은 배열 [1, 2, 3, 4, 6, 8, 12, 24]를 return합니다.

입출력 예 #2

  • 29의 약수를 오름차순으로 담은 배열 [1, 29]를 return합니다.

제출 답안

import Foundation

func solution(_ n: Int) -> [Int] {
    // 1부터 n까지 순회하며 약수를 찾음
    var divisors: [Int] = []
    for i in 1...n {
        if n % i == 0 { // 나누어 떨어지면 약수
            divisors.append(i)
        }
    }
    return divisors
}

Day 15

반응형