✅ 1. 문자열 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/181952
🎃 나의 풀이
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
🎃 나의 풀이
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
🎃 나의 풀이
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
🎃 나의 풀이
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
🎃 나의 풀이
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
🎃 나의 풀이
var inp = readLine()!.components(separatedBy: [" "]).map{$0}.joined()
print(inp)
joined함수를 사용하여 쉽게 구현하였습니다.
joined함수의 매개변수를 넣지 않으면 문자를 그대로 이어준다!
✅ 8. 문자열 돌리기
https://school.programmers.co.kr/learn/courses/30/lessons/181945
🎃 나의 풀이
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
🎃 나의 풀이
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
🎃 나의 풀이
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
🎃 나의 풀이
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
🎃 나의풀이
func solution(_ arr:[String]) -> String {
var result = ""
result = arr.map {$0}.joined()
return result
}
이전 문제의 map과 joined를 활용하여 쉽게 해결하였다.
반복문을 써야 하는 경우 map을 사용하면 더욱 간결하게 코드가 작성될 수 있어서 알아두면 좋을 거 같다.
💆♂️ 느낀점
어제 맥북을 구입하고 이제 본격적으로 ios개발자가 되기 위해 공부하기 시작했다.
다행히 c#과 비슷한 부분들이 많아서 순조롭게 진행되고 있는 거 같다.
코딩테스트로 swift문법을 익히고, 프로젝트를 진행하면서 xcode,swiftUI, UIkit를 익혀나갈 생각이다.
아직은 문제가 쉽고 기초단계라서 기분좋게 끝냈지만,.
점점 더 복잡하고 어려워질수록 많은 인내심이 요구될 것이라는 걸 알기 때문에 오늘의 기분을 즐기고 싶다!
'백준, 프로그래머스' 카테고리의 다른 글
[프로그래머스] swift 코딩 기초 트레이닝(0레벨) 3회차 (0) | 2024.05.23 |
---|---|
[프로그래머스] swift 코딩 기초 트레이닝(0레벨) 2회차 (0) | 2024.05.22 |
[프로그래머스] 대충 만든 자판 C# (0) | 2024.05.16 |
[프로그래머스] 바탕화면 정리 C# 풀이 (0) | 2024.05.13 |
[백준] 비전공자 Unity 개발자 백준 100문제 후기 (0) | 2022.11.04 |