백준, 프로그래머스

[프로그래머스] swift 코딩 기초 트레이닝(0레벨) 1회차

퐁스팡스 2024. 5. 20. 20:09

✅ 1.  문자열 출력하기

https://school.programmers.co.kr/learn/courses/30/lessons/181952

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🎃 나의 풀이

import Foundation

var str = readLine()!
print(str)

input을 받기 위한 환경 세팅하기 Terminal Line로 세팅해야 한다. PlayGroud에서는 input을 받을 수 없다.

또한 언랩핑을 readline() 함수를 호출할 때 !를 넣어서 강제로 옵셔널을 벗겨준다. 이 개념을 언랩핑이라고 하는데

nil이 아닌 값이 확실할 때만 언랩핑을 시도해야 하고, nil이 나올 경우 크레쉬가 난다고 설명을 보았다.

 

2.  A와 B 출력하기

https://school.programmers.co.kr/learn/courses/30/lessons/181951

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🎃 나의 풀이

let n = readLine()!.components(separatedBy: [" "]).map {Int ($0)!}

print("a = \(n[0])")
print("b = \(n[1])")

String구조체에 있는 components의 역할, splite 하는 함수, 사용법

문자열과 변수 값을 연결 시키고 싶을 땐 \()를 사용하여 가독성을 높인다.

 

3.  A와 B 출력하기

https://school.programmers.co.kr/learn/courses/30/lessons/181950

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🎃 나의 풀이

let temp = readLine()!.components(separatedBy: [" "])

let str = temp[0]
let n = Int(temp[1])!

var result: String = ""
for _ in 1...n{
    result += str
}

print(result)

주어진 문자열을 for문으로 더해주어 출력하였지만 더 간단한 방법이 있었다...

 

🏆 모범 풀이

let inp = readLine()!.components(separatedBy: [" "]).map {$0}

let (str,n) = (inp[0], Int(inp[1])!)

print(String(repeating: str, count: n))

string, int 값을 가진 튜플로 변수를 관리하고

String함수 중 n만큼 문자열을 반복하는 함수가 있었다. 이를 이용하여 더 간결한 코드를 작성할 수 있었다.

 

 

4.  대소문자 바꿔서 출력하기

https://school.programmers.co.kr/learn/courses/30/lessons/181949

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🎃 나의 풀이

let inp = readLine()!

var result: String = ""
for cha in inp{
    if(cha.isLowercase){
        result += cha.uppercased()
    }
    else{
        result += cha.lowercased()
    }
}

print(result)

string의 함수 중 대문자와 소문자를 확인할 수 있는 함수가 있었다. (isLowercase, isUppercase)

이를 조건문으로 분류하고 대문자화, 소문자화 하는 함수를 실행하여 출력~ (lowercased, uppercased)

 

하지만 더 간결한 방법이 있었으니...

 

🏆 모범 풀이

print(readLine()!.map { $0.isLowercase ? $0.uppercased() : $0.lowercased() }.joined())

삼항연산자와 joined를 사용하여 한 줄로 해결한 코드이다. ^^,,

joined 메서드는 문자열의 각 문자 사이에 특정한 구분문자를 넣어 문자열을 하나로 합쳐주는 역할을 하는데, 아무런 구분문자가 없는 경우는 문자를 연속해서 합쳐준다.

let result = "!@#$%^&*(\\'\"<>?:;"
print(result)

처음엔 엥 이게 무슨 문제야?! 싶어서 당황했지만,

작은따옴표( ' ) 큰 따옴표( " )는 코드상 영향을 끼치는 문자열이기 때문에

올바르게 출력하는 방법을 묻는 문제였다. 작은따옴표와 큰 따옴표 앞에 역슬레쉬( \ )를 넣어주면 된다! 

 

 

✅ 6.  덧셈식 출력하기

https://school.programmers.co.kr/learn/courses/30/lessons/181947

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🎃 나의 풀이

let inp = readLine()!.components(separatedBy: [" "]).map{Int($0)!}
print("\(inp[0]) + \(inp[1]) = \(inp[0] + inp[1])")

components함수를 사용하여 문자열을 정수형으로 변환하는 문제

이전 문제들에서 나온 내용들이라 크게 코멘트 할 게 없다.

 

✅ 7.  문자열 붙여서 출력하기

https://school.programmers.co.kr/learn/courses/30/lessons/181946

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🎃 나의 풀이

var inp = readLine()!.components(separatedBy: [" "]).map{$0}.joined()
print(inp)

joined함수를 사용하여 쉽게 구현하였습니다.

joined함수의 매개변수를 넣지 않으면 문자를 그대로 이어준다!

 

✅ 8.  문자열 돌리기

https://school.programmers.co.kr/learn/courses/30/lessons/181945

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🎃 나의 풀이

let inp = readLine()!;

let result = inp.map {String($0)}.joined(separator: "\n")
print(result)

이 문제도 joined 함수를 사용하여 쉽게 풀이가 가능했다! joined함수는 여러 방면에서 사용하기 좋으니 알아두면 좋을 거 같다.

 

✅ 9.  홀짝 구분하기

https://school.programmers.co.kr/learn/courses/30/lessons/181944

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🎃 나의 풀이

let inp = Int(readLine()!)!

let result = inp % 2 == 0 ? "\(inp) is even" : "\(inp) is odd"
print(result)

%의 쓰임새를 알면 크게 어려운 게 없는 문제이다.

%의 예시로는 20 % 3 = 2 이 된다.

20 % 3 은 20을 3으로 나눈 나머지를(2) 말한다.

 

🏆 모범 풀이

let a = Int(readLine()!)!
print(a, "is", a % 2 == 0 ? "even" : "odd")

모법 풀이를 보면서 print를 더 자세히 알게 되었다.

print는 여러 개의 매개변수를 넣을 수 있고, 각 매개변수를 공백으로 구분하여 출력하는 함수였다..!

 

 

✅ 10. 문자열 겹쳐쓰기

https://school.programmers.co.kr/learn/courses/30/lessons/181943

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🎃 나의 풀이

func solution(_ my_string: String, _ overwrite_string: String, _ s:Int)-> String{
    
    var str1  = my_string.prefix(s)
    var str2 = overwrite_string
    var str3 = my_string.suffix(my_string.count - (s + overwrite_string.count))
    
    let result = String(str1 + str2 + str3)
    return result
}

prefix함수, suffix함수를 활용하였다.

prefix는 매개변수로 정수 값이 들어가고 정수값 개수만큼의 문자열을 0인덱스부터 가져온다.

suffix는 반대로 뒤에서 정수값 개수 만큼의 문자열을 가져온다.

 

✅ 11. 문자열 섞기

https://school.programmers.co.kr/learn/courses/30/lessons/181942

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🎃 나의 풀이

func solution(_ str1:String, _ str2:String) -> String {
    
    var result = ""
    for (str1Char, str2har) in zip(str1,str2){
        result.append(str1Char)
        result.append(str2har)
    }
    
    return result
}

c#에 익숙한 나는 문자열[i] 형식으로 인덱스에 접근하려 했지만 swift는 안 되는 문법이었다...

zip함수에 대해 알게 되었고, 이를 활용하여 해결하였다.

zip은 두 개의 시퀀스를 묶어주는 역할을 하는 함수인데, 시퀀스는 컬렉션이라고 생각하면 되는 개념인 거 같다.

 

 

12. 문자 리스트를 문자열로 변환하기

https://school.programmers.co.kr/learn/courses/30/lessons/181941

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

🎃 나의풀이

func solution(_ arr:[String]) -> String {
    var result = ""
    
    result = arr.map {$0}.joined()
    return result
}

이전 문제의 map과 joined를 활용하여 쉽게 해결하였다.

반복문을 써야 하는 경우 map을 사용하면 더욱 간결하게 코드가 작성될 수 있어서 알아두면 좋을 거 같다.

 

 

 

 

💆‍♂️ 느낀점

어제 맥북을 구입하고 이제 본격적으로 ios개발자가 되기 위해 공부하기 시작했다.

다행히 c#과 비슷한 부분들이 많아서 순조롭게 진행되고 있는 거 같다.

코딩테스트로 swift문법을 익히고, 프로젝트를 진행하면서 xcode,swiftUI, UIkit를 익혀나갈 생각이다.

아직은 문제가 쉽고 기초단계라서 기분좋게 끝냈지만,.

점점 더 복잡하고 어려워질수록 많은 인내심이 요구될 것이라는 걸 알기 때문에 오늘의 기분을 즐기고 싶다!