프로그래머스 기초문제

[프로그래머스 기초문제] Day 18 문자열

Devleoper_yh 2025. 3. 11. 23:08
반응형

1. x 사이의 개수

문자열 myString이 주어집니다. myString을 문자 "x"를 기준으로 나눴을 때 나눠진 문자열 각각의 길이를 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.


제한사항

  • 1 ≤ myString의 길이 ≤ 100,000
    • myString은 알파벳 소문자로 이루어진 문자열입니다.

입출력 예

myString result
"oxooxoxxox" [1, 2, 1, 0, 1, 0]
"xabcxdefxghi" [0, 3, 3, 3]

입출력 예 설명

입출력 예 #1

  • "x"를 기준으로 문자열을 나누면 ["o", "oo", "o", "", "o", ""]가 됩니다. 각각의 길이로 배열을 만들면 [1, 2, 1, 0, 1, 0]입니다. 따라서 [1, 2, 1, 0, 1, 0]을 return 합니다.

입출력 예 #2

  • "x"를 기준으로 문자열을 나누면 ["", "abc", "def", "ghi"]가 됩니다. 각각의 길이로 배열을 만들면 [0, 3, 3, 3]입니다. 따라서 [0, 3, 3, 3]을 return 합니다.

제출 답안

import Foundation

func solution(_ myString: String) -> [Int] {
	// x를 기준으로 문자열을 나누어 배열로 변환
    let splitArray = myString.components(separatedBy: "x")
    
    // 나눠진 문자열 각각의 길이를 구한 후 배열로 변환하여 반환
    return splitArray.map { $0.count }
}

2. 문자열 잘라서 정렬하기

문자열 myString이 주어집니다. "x"를 기준으로 해당 문자열을 잘라내 배열을 만든 후 사전순으로 정렬한 배열을 return 하는 solution 함수를 완성해 주세요.

단, 빈 문자열은 반환할 배열에 넣지 않습니다.


제한사항

  • 1 ≤ myString ≤ 100,000
    • myString은 알파벳 소문자로 이루어진 문자열입니다.

입출력 예

myString result
"axbxcxdx" ["a", "b", "c", "d"]
"dxccxbbbxaaaa" ["aaaa, "bbb", "cc", "d"]

입출력 예 설명

입출력 예 #1

  • myString을 "x"를 기준으로 자른 배열은 ["a","b","c","d"]이며, 이 배열은 이미 사전순으로 정렬된 상태입니다. 따라서 해당 배열을 return 합니다.

입출력 예 #2

  • myString을 "x"를 기준으로 자른 배열은 ["d","cc","bbb","aaaa"]이며, 이 배열을 사전순으로 정렬하면 ["aaaa","bbb","cc","d"]입니다. 따라서 해당 배열을 return 합니다.

제출 답안

import Foundation

func solution(_ myString:String) -> [String] {
    // 기준으로 문자열을 나눔, Substring을 String으로 변환 후 정렬
    return myString.split(separator: "x").map { String($0) }.sorted()
}

3. 간단한 식 계산하기

문자열 binomial이 매개변수로 주어집니다. binomial은 "aop b" 형태의 이항식이고 a와 b는 음이 아닌 정수, op는 '+', '-', '*' 중 하나입니다. 주어진 식을 계산한 정수를 return 하는 solution 함수를 작성해 주세요.


제한사항

  • 0 ≤ a, b ≤ 40,000
  • 0을 제외하고 a, b는 0으로 시작하지 않습니다.

입출력 예

binomial result
"43 + 12" 55
"0 -7777" -7777
"40000 * 40000" 1600000000

입출력 예 설명

입출력 예 #1

  • 예제 1번의 binomial은 "43 + 12"로 이 식을 계산한 결과인 43 + 12 = 55를 return 합니다.

입출력 예 #2

  • 예제 2번의 binomial은 "0 - 7777"로 이 식을 계산한 결과인 0 - 7777 = -7777을 return 합니다.

입출력 예 #3

  • 예제 3번의 binomial은 "40000 * 40000"으로 이 식을 계산한 결과인 40000 × 40000 = 1600000000을 return 합니다.

제출 답안

import Foundation

func solution(_ binomial: String) -> Int {
    // 문자열을 공백(" ")을 기준으로 나누어 배열로 변환
    let components = binomial.split(separator: " ")
    
    // 각 요소를 가져오기
    guard components.count == 3,
          let a = Int(components[0]),
          let b = Int(components[2]) else { return 0 }
    
    let op = String(components[1]) // 연산자
    
    // 연산자에 따라 계산 수행
    switch op {
    case "+":
        return a + b
    case "-":
        return a - b
    case "*":
        return a * b
    default:
        return 0 // 예상되지 않은 연산자는 기본값 0 반환
    }
}

4. 문자열 바꿔서 찾기

문자 "A"와 "B"로 이루어진 문자열 myString과 pat가 주어집니다. myString의 "A"를 "B"로, "B"를 "A"로 바꾼 문자열의 연속하는 부분 문자열 중  pat이 있으면 1을 아니면 0을 return 하는 solution 함수를 완성하세요.


제한사항

  • 1 ≤ myString의 길이 ≤ 100
  • 1 ≤ pat의 길이 ≤ 10
    • myString과 pat는 문자 "A"와 "B"로만 이루어진 문자열입니다.

입출력 예

myString pat result
"ABBAA" "AABB" 1
"ABAB" "ABAB" 0

입출력 예 설명

입출력 예 #1

  • "ABBAA"에서 "A"와 "B"를 서로 바꾸면 "BAABB"입니다. 여기에는 부분문자열 "AABB"가 있기 때문에 1을 return 합니다.

입출력 예 #2

  • "ABAB"에서 "A"와 "B"를 서로 바꾸면 "BABA"입니다. 여기에는 부분문자열 "BABA"가 없기 때문에 0을 return 합니다.

제출 답안

import Foundation

func solution(_ myString: String, _ pat: String) -> Int {
    // A를 B로, B를 A로 변환
    let transformedString = myString.map { $0 == "A" ? "B" : "A" }.joined()
    
    // 변환된 문자열에 pat이 포함되는지 확인
    return transformedString.contains(pat) ? 1 : 0
}

5. rny_string

'm'과 "rn"이 모양이 비슷하게 생긴 점을 활용해 문자열에 장난을 하려고 합니다. 문자열 rny_string이 주어질 때, rny_string의 모든 'm'을 "rn"으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.


제한사항

  • 1 ≤ rny_string의 길이 ≤ 100
  • rny_string은 영소문자로만 이루어져 있습니다.

입출력 예

my_string result
"masterpiece" "rnasterpiece"
"programmers" "'prograrnrners"
"jerry" "jerry"
"burn" "burn"

입출력 예 설명

입출력 예 #1

  • 예제 1번의 rny_string의 'm'을 "rn"으로 바꾸는 과정을 표로 나타내면 다음과 같습니다.
따라서 "rnasterpiece"를 return 합니다.

입출력 예 #2

  • 예제 2번의 rny_string의 'm'을 "rn"으로 바꾸는 과정을 표로 나타내면 다음과 같습니다.
따라서 "prograrnrners"를 return 합니다.

입출력 예 #3

  • 예제 3번의 rny_string에는 'm'이 없습니다. 따라서 rny_string 그대로인 "jerry"를 return 합니다.

입출력 예 #4

  • 예제 4번의 rny_string에는 'm'이 없습니다. 따라서 rny_string 그대로인 "burn"를 return 합니다.

제출 답안

import Foundation

func solution(_ rny_string: String) -> String {
	// m을 rn으로 교체한다
    return rny_string.replacingOccurrences(of: "m", with: "rn")
}

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


Day 18

반응형