프로그래머스 기초문제

[프로그래머스 기초문제] Day 22 함수(메서드), 조건문 활용

Devleoper_yh 2025. 3. 17. 22:42
반응형

1. 0 떼기

정수로 이루어진 문자열 n_str이 주어질 때, n_str의 가장 왼쪽에 처음으로 등장하는 0들을 뗀 문자열을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 2 ≤ n_str ≤ 10
  • n_str이 "0"으로만 이루어진 경우는 없습니다.

입출력 예

n_str result
"0010" "10"
"854020" "854020"

입출력 예 설명

입출력 예 #1

  • "0010"의 가장 왼쪽에 연속으로 등장하는 "0"을 모두 제거하면 "10"이 됩니다.

입출력 예 #2

  • "854020"는 가장 왼쪽에 0이 없으므로 "854020"을 return합니다.
import Foundation

func solution(_ n_str: String) -> String {
    // 문자열의 앞부분에서 0을 제거
    let trimmed = n_str.drop(while: { $0 == "0" })
    
    // 만약 모든 문자가 0이라서 빈 문자열이 되면, 0을 반환
    return trimmed.isEmpty ? "0" : String(trimmed)
}

2. 두 수의 합

0 이상의 두 정수가 문자열 a, b로 주어질 때, a + b의 값을 문자열로 return 하는 solution 함수를 작성해 주세요.


제한사항

  • 1 ≤ a의 길이 ≤ 100,000
  • 1 ≤ b의 길이 ≤ 100,000
  • a와 b는 숫자로만 이루어져 있습니다.
  • a와 b는 정수 0이 아니라면 0으로 시작하지 않습니다.

입출력 예

a b result
"582" "734" "1316"
"18446744073709441615" "287346502836570928366" "305793246910280479981"
"0" "0" "0"

 


입출력 예 설명

입출력 예 #1

  • 예제 1번의 a, b는 각각 582, 734이고 582 + 734 = 1316입니다. 따라서 "1316"을 return 합니다.

입출력 예 #2

  • 예제 2번의 a, b는 각각 18446744073709551615, 287346502836570928366이고 18446744073709551615 + 287346502836570928366 = 305793246910280479981입니다. 따라서 "305793246910280479981"을 return 합니다.

입출력 예 #3

  • 예제 3번의 a, b는 각각 0, 0이고 0 + 0 = 0입니다. 따라서 "0"을 return 합니다.

제출 답안

import Foundation

func solution(_ a: String, _ b: String) -> String {
    var result = ""
    var carry = 0 // 올림수 저장 변수

    let aChars = Array(a.reversed()) // 뒤집어서 일의 자리부터 처리
    let bChars = Array(b.reversed())

    let maxLength = max(aChars.count, bChars.count)

    for i in 0..<maxLength {
        let digitA = i < aChars.count ? Int(String(aChars[i]))! : 0
        let digitB = i < bChars.count ? Int(String(bChars[i]))! : 0

        let sum = digitA + digitB + carry
        carry = sum / 10 // 10 이상이면 올림 발생
        result.append(String(sum % 10)) // 현재 자리 숫자 추가
    }

	// 마지막 자리 올림 처리
    if carry > 0 {
        result.append(String(carry))
    }
	
    // 다시 뒤집어서 정답 반환
    return String(result.reversed())
}

3. 문자열로 변환

정수 n이 주어질 때, n을 문자열로 변환하여 return하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ n ≤ 10000

입출력 예

n result
123 "123"
2573 "2573"

입출력 예 설명

입출력 예 #1

  • 123을 문자열로 변환한 "123"을 return합니다.

입출력 예 #2

  • 2573을 문자열로 변환한 "2573"을 return합니다.

제출 답안

import Foundation

func solution(_ n: Int) -> String {
    return String(n)
}

4. 배열의 원소 삭제하기

정수 배열 arr과 delete_list가 있습니다. arr의 원소 중 delete_list의 원소를 모두 삭제하고 남은 원소들은 기존의 arr에 있던 순서를 유지한 배열을 return 하는 solution 함수를 작성해 주세요.


제한사항

  • 1 ≤ arr의 길이 ≤ 100
  • 1 ≤ arr의 원소 ≤ 1,000
  • arr의 원소는 모두 서로 다릅니다.
  • 1 ≤ delete_list의 길이 ≤ 100
  • 1 ≤ delete_list의 원소 ≤ 1,000
  • delete_list의 원소는 모두 서로 다릅니다.

입출력 예

arr delete_list result
[293, 1000, 395, 678, 94] [94, 777, 104, 1000, 1, 12] [293, 395, 678]
[110, 66, 439, 785, 1] [377, 823, 119, 43] [110, 66, 439, 785, 1]

입출력 예 설명

입출력 예 #1

  • 예제 1번의 arr의 원소 중 1000과 94가 delete_list에 있으므로 이 두 원소를 삭제한 [293, 395, 678]을 return 합니다.

입출력 예 #2

  • 예제 2번의 arr의 원소 중 delete_list에 있는 원소는 없습니다. 따라서 arr 그대로인 [110, 66, 439, 785, 1]을 return 합니다.

제출 답안

import Foundation

func solution(_ arr: [Int], _ delete_list: [Int]) -> [Int] {
    // arr 배열을 필터링하여 delete_list에 포함되지 않은 원소만 남김
    return arr.filter { !delete_list.contains($0) }
}

5. 부분 문자열인지 확인하기

부분 문자열이란 문자열에서 연속된 일부분에 해당하는 문자열을 의미합니다. 예를 들어, 문자열 "ana", "ban", "anana", "banana", "n"는 모두 문자열 "banana"의 부분 문자열이지만, "aaa", "bnana", "wxyz"는 모두 "banana"의 부분 문자열이 아닙니다.

문자열 my_string과 target이 매개변수로 주어질 때, target이 문자열 my_string의 부분 문자열이라면 1을, 아니라면 0을 return 하는 solution 함수를 작성해 주세요.


제한사항

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

입출력 예

my_string target result
"banana" "ana" 1
"banana" "wxyz" 0

입출력 예 설명

입출력 예 #1

  • 문제 설명과 같습니다.

입출력 예 #2

  • 문제 설명과 같습니다.

제출 답안

import Foundation

func solution(_ my_string: String, _ target: String) -> Int {
    return my_string.contains(target) ? 1 : 0
}

Day 22

반응형