1. 치킨 쿠폰
프로그래머스 치킨은 치킨을 시켜먹으면 한 마리당 쿠폰을 한 장 발급합니다. 쿠폰을 열 장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스 치킨에도 쿠폰이 발급됩니다. 시켜먹은 치킨의 수 chicken이 매개변수로 주어질 때 받을 수 있는 최대 서비스 치킨의 수를 return하도록 solution 함수를 완성해주세요.
제한사항
- chicken은 정수입니다.
- 0 ≤ chicken ≤ 1,000,000
입출력 예
chicken | result |
100 | 11 |
1,081 | 120 |
입출력 예 설명
입출력 예 #1
- 100마리를 주문하면 쿠폰이 100장 발급되므로 서비스 치킨 10마리를 주문할 수 있습니다.
- 10마리를 주문하면 쿠폰이 10장 발급되므로 서비스 치킨 1마리를 주문할 수 있습니다.
- 따라서 10 + 1 = 11 을 return합니다.
입출력 예 #2
- 1081마리를 주문하면 쿠폰이 1081장 발급되므로 서비스 치킨 108마리를 주문할 수 있습니다. 그리고 쿠폰이 1장 남습니다.
- 108마리를 주문하면 쿠폰이 108장 발급되므로 서비스 치킨 10마리를 주문할 수 있습니다. 그리고 쿠폰이 8장 남습니다.
- 10마리를 주문하면 쿠폰이 10장 발급되므로 서비스 치킨 1마리를 주문할 수 있습니다.
- 1마리를 주문하면 쿠폰이 1장 발급됩니다.
- 가지고 있는 쿠폰이 총 10장이므로 서비스 치킨 1마리를 추가로 주문할 수 있습니다.
- 따라서 108 + 10 + 1 + 1 = 120 을 return합니다.
제출 답안
import Foundation
func solution(_ chicken: Int) -> Int {
var coupon = chicken // 초기 쿠폰 수는 주문한 치킨 수와 동일
var serviceChicken = 0 // 서비스 치킨 수 초기화
// 쿠폰이 10장 이상일 때만 서비스 치킨을 받을 수 있음
while coupon >= 10 {
let newService = coupon / 10 // 새로 받을 서비스 치킨 수
serviceChicken += newService // 총 서비스 치킨 수에 추가
coupon = newService + (coupon % 10) // 남은 쿠폰과 새로 받은 쿠폰 합산
}
return serviceChicken // 최대 서비스 치킨 수 반환
}
2. 이진수 더하기
이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때, 두 이진수의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
- return 값은 이진수를 의미하는 문자열입니다.
- 1 ≤ bin1, bin2의 길이 ≤ 10
- bin1과 bin2는 0과 1로만 이루어져 있습니다.
- bin1과 bin2는 "0"을 제외하고 0으로 시작하지 않습니다.
입출력 예
bin1 | bin2 | result |
"10" | "11" | "101" |
"1001" | "1111" | "11000" |
입출력 예 설명
입출력 예 #1
- 10 + 11 = 101 이므로 "101" 을 return합니다.
입출력 예 #2
- 1001 + 1111 = 11000 이므로 "11000"을 return합니다.
분석
1. bin1과 bin2를 이진수로 변환
2. 두 수를 더함
3. 결과를 다시 이진수 문자열로 변환
제출 답안
import Foundation
func solution(_ bin1: String, _ bin2: String) -> String {
// bin1과 bin2를 2진수로 해석하여 정수(Int)로 변환
if let num1 = Int(bin1, radix: 2), let num2 = Int(bin2, radix: 2) {
// 두 정수를 더한 후, 다시 이진수 문자열로 변환하여 반환
return String(num1 + num2, radix: 2)
}
// 변환에 실패할 경우 기본값 "0" 반환 (예외 처리)
return "0"
}
https://developer.apple.com/documentation/swift/int/init(_:radix:)
init(_:radix:) | Apple Developer Documentation
Creates a new integer value from the given string and radix.
developer.apple.com
3. A로 B 만들기
문자열 before와 after가 매개변수로 주어질 때, before의 순서를 바꾸어 after를 만들 수 있으면 1을, 만들 수 없으면 0을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 0 < before의 길이 == after의 길이 < 1,000
- before와 after는 모두 소문자로 이루어져 있습니다.
입출력 예
before | after | result |
"ollef" | "hello" | 1 |
"allpe" | "apple" | 0 |
입출력 예 설명
입출력 예 #1
- "olleh"의 순서를 바꾸면 "hello"를 만들 수 있습니다.
입출력 예 #2
- "allpe"의 순서를 바꿔도 "apple"을 만들 수 없습니다.
분석
1. 문자열 정렬
2. 정렬된 문자열이 같으면 1, 다르면 0
제출 답안
import Foundation
func solution(_ before: String, _ after: String) -> Int {
// 문자열을 정렬한 후 비교
return before.sorted() == after.sorted() ? 1 : 0
}
4. k의 개수
1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다. 정수 i, j, k가 매개변수로 주어질 때, i부터 j까지 k가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ i < j ≤ 100,000
- 0 ≤ k ≤ 9
입출력 예
i | j | k | result |
1 | 13 | 1 | 6 |
10 | 50 | 5 | 5 |
3 | 10 | 2 | 0 |
입출력 예 설명
입출력 예 #1
- 본문과 동일합니다.
입출력 예 #2
- 10부터 50까지 5는 15, 25, 35, 45, 50 총 5번 등장합니다. 따라서 5를 return 합니다.
입출력 예 #3
- 3부터 10까지 2는 한 번도 등장하지 않으므로 0을 return 합니다.
분석
1. i부터 j까지 문자열로 변환
2. 각 숫자에서 k 등장 횟수 세기
3. 모든 횟수를 합산하여 반환
제출 답안
import Foundation
func solution(_ i: Int, _ j: Int, _ k: Int) -> Int {
let target = String(k) // k를 문자열로 변환
var count = 0
for num in i...j {
let numString = String(num) // 현재 숫자를 문자열로 변환
count += numString.filter { String($0) == target }.count // k와 같은 문자 개수 세기
}
return count
}
'프로그래머스 입문문제' 카테고리의 다른 글
[프로그래머스 입문문제] Day 25 시뮬레이션, 조건문, 수학 (0) | 2025.02.19 |
---|---|
[프로그래머스 입문문제] Day 23 배열, 정렬, 문자열 (0) | 2025.02.16 |
[프로그래머스 입문문제] Day 22 dp, 수학, 조건문, 배열 (0) | 2025.02.14 |
[프로그래머스 입문문제] Day 21 문자열, 사칙연산, 시뮬레이션, 2차원배열, 수학, 배열 (0) | 2025.02.12 |
[프로그래머스 입문문제] Day 20 수학, 시뮬레이션, 문자열, 사칙연산 (0) | 2025.02.12 |