✅ 1. 문자열 곱하기
https://school.programmers.co.kr/learn/courses/30/lessons/181940
🎃나의 풀이
func solution(_ my_string:String, _ k:Int) -> String {
return String(repeating: my_string, count: k)
}
비슷한 문제가 있었는데, 함수형태로 바뀐것뿐이라서 String의 repeating을 사용하여 해결하였다.
✅ 2. 더 크게 합치기
https://school.programmers.co.kr/learn/courses/30/lessons/181939
🎃나의 풀이
var str1 = String(a)
var str2 = String(b)
var sam1 = Int(str1 + str2)!
var sam2 = Int(str2 + str1)!
return sam1 > sam2 ? sam1 : sam2
문자열과 정수형을 자유롭게 변환할 수 있는지 묻는 문제인 거 같았다.
의식의 흐름대로 작성된 나의 코드, 정답은 맞았지만 아마 더 줄일 수 있을 것 같은데...
🏆 모범 풀이
func solution(_ a:Int, _ b:Int) -> Int {
return max(Int(String(a) + String(b))!, Int(String(b) + String(a))!)
}
max 함수를 사용하여 한줄로 표현이 가능했다.
✅ 3. 두 수의 연산값 비교하기
https://school.programmers.co.kr/learn/courses/30/lessons/181938
🎃나의 풀이
func solution(_ a:Int, _ b:Int) -> Int {
return max(Int(String(a) + String(b))!, 2 * a * b)
}
max함수를 사용해 한줄로 마무리하였다~
✅ 4. n의 배수
https://school.programmers.co.kr/learn/courses/30/lessons/181937
🎃나의 풀이
func solution(_ num:Int, _ n:Int) -> Int {
return num % n == 0 ? 1 : 0
}
삼항연산자와 %를 사용하여 간결하게 해결!
✅ 5. 공배수
https://school.programmers.co.kr/learn/courses/30/lessons/181936
🎃나의 풀이
func solution(_ number:Int, _ n:Int, _ m:Int) -> Int {
return number % n == 0 && number % m == 0 ? 1 : 0
}
주어진 number를 n과 m으로 나누어져야 공배수로 볼 수 있으므로
삼항연산자, % , && 연산자를 사용 하여 간단하게 풀어주었다.
✅ 6. 홀짝에 따라 다른 값 반환하기
https://school.programmers.co.kr/learn/courses/30/lessons/181935
🎃나의 풀이
func solution(_ n:Int) -> Int {
var result = 0
// 짝수인 경우
if(n % 2 == 0){
for i in stride(from: 0, through: n, by: 2){
result += i*i
}
}
else{
for i in stride(from: 1, through: n, by: 2){
result += i
}
}
return result
}
stride라는 함수를 알게 되었다. 직역을 해보니 '큰 걸음으로 걷다'였고, 보자마자 어떤 함수인지 알 수 있었다. ㅋㅋ
시작 숫자부터, 마지막 숫자까지 by만큼 건너 띄면서 세는 함수여서 이번 문제에 사용하기 적합하였다.
through과 to 두가지 선택지가 있는데 through은 '이하', to는 '미만'이다.
🏆 모범 풀이
func solution(_ n:Int) -> Int {
if n % 2 == 0 { return stride(from: 2, through: n, by: 2).reduce(0) { $0 + $1 * $1 } }
else { return stride(from: 1, through: n, by: 2).reduce(0, +) }
}
모범 풀이는 reduce라는 함수도 사용하여 더욱 간결하게 해결하였다.
reduce는 map과 비슷한 함수인데, 컬렉션을 하나의 단일 값으로 반환해준다.
반면 map은 컬렉션을 다른 배열로 반환하는 것에서 차이점이 있다.
✅ 7. 조건 문자열
https://school.programmers.co.kr/learn/courses/30/lessons/181934
🎃나의 풀이
func solution(_ ineq:String, _ eq:String, _ n:Int, _ m:Int) -> Int {
if(ineq == "<" && eq == "="){
return n <= m ? 1 : 0
}
else if (ineq == ">" && eq == "="){
return n >= m ? 1 : 0
}
else if(ineq == "<" && eq == "!"){
return n < m ? 1 : 0
}
else if (ineq == ">" && eq == "!"){
return n > m ? 1 : 0
}
return 0
}
4가지 경우의 수를 4개의 조건문으로 처리하여 해결하였다.
🏆 모범 풀이
func solution(_ ineq:String, _ eq:String, _ n:Int, _ m:Int) -> Int {
switch ineq+eq {
case ">=": return n >= m ? 1 : 0
case "<=": return n <= m ? 1 : 0
case ">!": return n > m ? 1 : 0
case "<!": return n < m ? 1 : 0
default: return 0
}
}
모범 풀이에서는 switch문을 사용하여 더욱 깔끔하게 해결한 모습이다.
비슷한 상황인 경우 switch문을 같이 생각해봐야겠다.
✅ 8. flag에 따라 다른 값 반환하기
https://school.programmers.co.kr/learn/courses/30/lessons/181933
🎃나의 풀이
func solution(_ a:Int, _ b:Int, _ flag:Bool) -> Int {
return flag ? a + b : a - b
}
쉬운 문제였다. 삼항연산자로 깔끔하게 해결~
✅ 9. 코드 처리하기
https://school.programmers.co.kr/learn/courses/30/lessons/181932
🎃나의 풀이
func solution(_ code:String) -> String {
var result : String = ""
var mode : Int = 0
let characters = Array(code)
for i in 0..<characters.count{
// 1인 경우 mode를 변경해주고 다음 반복문으로 넘어간다.
if(characters[i] == "1"){
mode = mode == 0 ? 1 : 0
continue
}
// 모드가 0이고 짝수인 경우
if(mode == 0 && i % 2 == 0){
result += String(characters[i])
}
// 모드가 1이고 홀수인 경우
if(mode == 1 && i % 2 != 0){
result += String(characters[i])
}
}
return result.count == 0 ? "EMPTY" : result
}
switft는 문자열을 인덱스로 접근할 수 없기 때문에 char배열로 만들어서 관리하였다.
return 값을 뱉을 때 삼항연산자로 빈 값인지 확인하고 반환!
🏆 모범 풀이
func solution(_ code: String) -> String {
let result = code.enumerated().reduce(into: ("", 0)) { acc, val in
let (i, c) = val
if c == "1" {
acc.1 = 1 - acc.1
} else if (acc.1 == i % 2) {
acc.0 += String(c)
}
}
return result.0.isEmpty ? "EMPTY" : result.0
}
모범 풀이에서는 enumerated와 reduce를 사용하여 더욱 간결하게 해결된 모습이다.
enumerated 함수는 배열을 매개변수로 넣으면 (n,value)의 튜플 형태의 시퀀스로 반환을 해주는데
n은 인덱스 번호이고, value는 인덱스에 해당하는 값이다. 여기에 reduce를 활용할 수 있다니 대단하다..
✅ 10. 등차수열의 특정한 항만 더하기
https://school.programmers.co.kr/learn/courses/30/lessons/181931
🎃나의 풀이
func solution(_ a:Int, _ d:Int, _ included:[Bool]) -> Int {
var result = 0
for (index, isIncluded) in included.enumerated(){
if(isIncluded){
result += a + index * d
}
}
return result
}
enumerated함수를 사용하여 풀어보았다.
enumerated함수는 시퀀스를 튜플(value, value) 형태로 반환해주는 함수이다.
🏆 모범 풀이
func solution(_ a: Int, _ d: Int, _ included: [Bool]) -> Int {
return included.indices.filter { included[$0] }.map { a + d * $0 }.reduce(0, +)
}
모범 풀이를 보니 reduce를 사용해서 간결하게 표현했다.
reduce를 사용하면 for문을 생략할 수 있는 모양인데 나에겐 아직 쓰기 어렵다..
다음에 map,reduce를 제대로 정리해야겠다.
'백준, 프로그래머스' 카테고리의 다른 글
[프로그래머스] swift 코딩 기초 트레이닝(0레벨) 5회차 (0) | 2024.05.27 |
---|---|
[프로그래머스] swift 코딩 기초 트레이닝(0레벨) 3회차 (0) | 2024.05.23 |
[프로그래머스] swift 코딩 기초 트레이닝(0레벨) 1회차 (0) | 2024.05.20 |
[프로그래머스] 대충 만든 자판 C# (0) | 2024.05.16 |
[프로그래머스] 바탕화면 정리 C# 풀이 (0) | 2024.05.13 |