프로그래머스 기초문제

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

Devleoper_yh 2025. 3. 10. 22:29
반응형

1. 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기

문자열 myString과 pat가 주어집니다. myString의 부분 문자열중 pat로 끝나는 가장 긴 부분 문자열을 찾아서 return 하는 solution 함수를 완성해 주세요.


제한사항

  • 5 ≤ myString ≤ 20
  • 1 ≤ pat ≤ 5
    • pat은 반드시 myString의 부분 문자열로 주어집니다.
  • myString과 pat에 등장하는 알파벳은 대문자와 소문자를 구분합니다.

입출력 예

myString pat result
"AbCdEFG" "dE" "AbCdE"
"AAAAaaaa" "a" "AAAAaaaa"

입출력 예 설명

입출력 예 #1

  • "AbCdEFG"에서 "dE"는 한 번 등장하며 처음부터 해당 위치까지 잘라내면 "AbCdE"가 됩니다. 따라서 이 문자열이 "dE"로 끝나는 가장 긴 문자열이며, "AbCdE"를 return 합니다.

입출력 예 #2

  • "AAAAaaaa"에서 "a"는 총 네 번 등장하며 이 중 가장 마지막에 있는 위치까지 잘라내면 "AAAAaaaa"가 됩니다. 따라서 이 문자열이 "a"로 끝나는 가장 긴 문자열이며, "AAAAaaaa"를 return 합니다.

제출 답안

import Foundation

func solution(_ myString: String, _ pat: String) -> String {
    // myString에서 pat이 마지막으로 등장하는 위치를 찾음
    if let range = myString.range(of: pat, options: .backwards) {
        // 찾은 위치까지의 부분 문자열을 반환
        return String(myString[..<range.upperBound])
    }
    // pat이 없으면 빈 문자열 반환
    return ""
}

https://developer.apple.com/documentation/swift/range

 

Range | Apple Developer Documentation

A half-open interval from a lower bound up to, but not including, an upper bound.

developer.apple.com

https://developer.apple.com/documentation/swift/range/upperbound

 

upperBound | Apple Developer Documentation

The range’s upper bound.

developer.apple.com


2. 문자열이 몇 번 등장하는지 세기

문자열 myString과 pat이 주어집니다. myString에서 pat이 등장하는 횟수를 return 하는 solution 함수를 완성해 주세요.


제한사항

  • 1 ≤ myString ≤ 1000
  • 1 ≤ pat ≤ 10

입출력 예

myString pat result
"banana" "ana" 2
"aaaa" "aa" 3

입출력 예 설명

입출력 예 #1

  • "banana"에서 1 ~ 3번 인덱스에서 한 번, 3 ~ 5번 인덱스에서 또 한 번 "ana"가 등장해서 총 두 번 등장합니다. 따라서 2를 return 합니다.

입출력 예 #2

  • "aaaa"에서 0 ~ 2번 인덱스에서 한 번, 1 ~ 3번 인덱스에서 한 번, 2 ~ 4번 인덱스에서 한 번 "aa"가 등장해서 총 세 번 등장합니다. 따라서 3을 return 합니다.

제출 답안

import Foundation

func solution(_ myString: String, _ pat: String) -> Int {
    var count = 0 // pat이 등장하는 횟수를 저장할 변수
    var startIndex = myString.startIndex // 검색을 시작할 위치
    
    while let range = myString.range(of: pat, range: startIndex..<myString.endIndex) {
        count += 1 // pat을 찾을 때마다 count 증가
        
        // 다음 검색 시작 위치를 업데이트 (겹치는 부분도 고려)
        startIndex = range.lowerBound < myString.index(before: myString.endIndex) ? 
        myString.index(after: range.lowerBound) : myString.endIndex
    }
    
    return count // 최종적으로 pat이 등장한 횟수를 반환
}

3. ad 제거하기

문자열 배열 strArr가 주어집니다. 배열 내의 문자열 중 "ad"라는 부분 문자열을 포함하고 있는 모든 문자열을 제거하고 남은 문자열을 순서를 유지하여 배열로 return 하는 solution 함수를 완성해 주세요.


제한사항

  • 1 ≤ strArr의 길이 ≤ 1,000
    • 1 ≤ strArr의 원소의 길이 ≤ 20
    • strArr의 원소는 알파벳 소문자로 이루어진 문자열입니다.

입출력 예

strArr result
["and","notad","abcd"] ["and","abcd"]
["there","are","no","a","ds"] ["there","are","no","a","ds"]

입출력 예 설명

입출력 예 #1

  • 1번 인덱스의 문자열인 "notad"는 부분 문자열로 "ad"를 가집니다. 따라서 해당 문자열을 제거하고 나머지는 순서를 유지하여 ["and","abcd"]를 return 합니다.

입출력 예 #2

  • "ad"가 부분 문자열로 들어간 문자열이 존재하지 않습니다. 따라서 원래 배열을 그대로 return 합니다.

제출 답안

import Foundation

func solution(_ strArr: [String]) -> [String] {
	// ad를 포함하지 않는 문자열만 필터링하여 반환
    return strArr.filter { !$0.contains("ad") }
}

4. 공백으로 구분하기1

단어가 공백 한 개로 구분되어 있는 문자열 my_string이 매개변수로 주어질 때, my_string에 나온 단어를 앞에서부터 순서대로 담은 문자열 배열을 return 하는 solution 함수를 작성해 주세요.


제한사항

  • my_string은 영소문자와 공백으로만 이루어져 있습니다.
  • 1 ≤ my_string의 길이 ≤ 1,000
  • my_string의 맨 앞과 맨 뒤에 글자는 공백이 아닙니다.

입출력 예

my_string result
"I love you" ["i", "love", "you"]
"programmers" ["programmers"]

입출력 예 설명

입출력 예 #1

  • 예제 1번의 my_string은 "i love you"로 공백 한 칸으로 나누어진 단어들은 앞에서부터 순서대로 "i", "love", "you" 이므로 ["i", "love", "you"]를 return 합니다.

입출력 예 #2

  • 예제 2번의 my_string은 "programmers"로 단어가 하나만 있습니다. 따라서 ["programmers"]를 return 합니다.

제출 답안

import Foundation

func solution(_ my_string: String) -> [String] {
    // 공백을 기준으로 문자열을 나누고 배열로 반환
    return my_string.components(separatedBy: " ")
}

https://developer.apple.com/documentation/foundation/nsstring/1413214-components

 

components(separatedBy:) | Apple Developer Documentation

Returns an array containing substrings from the receiver that have been divided by a given separator.

developer.apple.com


5. 공백으로 구분하기 2

단어가 공백 한 개 이상으로 구분되어 있는 문자열 my_string이 매개변수로 주어질 때, my_string에 나온 단어를 앞에서부터 순서대로 담은 문자열 배열을 return 하는 solution 함수를 작성해 주세요.


제한사항

  • my_string은 영소문자와 공백으로만 이루어져 있습니다.
  • 1 ≤ my_string의 길이 ≤ 1,000
  • my_string의 맨 앞과 맨 뒤에도 공백이 있을 수 있습니다.
  • my_string에는 단어가 하나 이상 존재합니다.

입출력 예

my_string result
" i    love  you" ["i", "love", "you"]
"    programmers  " ["programmers"]

입출력 예 설명

입출력 예 #1

  • 예제 1번의 my_string은 " i    love  you"로 공백을 기준으로 단어를 나누면 "i", "love", "you" 3개의 단어가 있습니다. 따라서 ["i", "love", "you"]를 return 합니다.

입출력 예 #2

  • 예제 2번의 my_string은 "    programmers  "로 단어는 "programmers" 하나만 있습니다. 따라서 ["programmers"]를 return 합니다.

제출 답안

import Foundation

func solution(_ my_string: String) -> [String] {
    // 연속된 공백을 포함하여 문자열을 나누고 빈 요소를 제거하여 반환
    return my_string.components(separatedBy: .whitespaces).filter { !$0.isEmpty }
}

Day 17

반응형