프로그래머스 1단계) 이상한 문자 만들기

2022. 1. 24. 11:48Algorithm/알고리즘

728x90
반응형

문제

10:46 - 11:25(40분 고민하고 답을 봄)

접근 방식

1) components(seperatedBy: " ")를 이용해서 띄어쓰기를 기준으로 String type의 배열을 구하고

//solution이라는 함수는 String타입의 s를 파라미터로 받고 있음
var s = s //"abc bcd cK"
var newString = s.components(seperatedBy: " ")//["abc", "bcd", "cK"]

2) 리턴된 배열을 map 고차함수를 이용해서 짝수번째 알파벳은 대문자, 홀수번째 알파벳은 소문자로 리턴하고

//solution이라는 함수는 String타입의 s를 파라미터로 받고 있음
var s = s //"abc bcd cK"
var newString = s.components(seperatedBy: " ").map { if $0...(여기서 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꿔야하는데.. 쉽지않네?) }
//["abc", "bcd", "cK"]에서 map을 통해 처리해줘야 한다고 생각했었다.

3) join을 이용해서 배열 안 string요소들을 하나의 string으로 만들어주고

4) 띄어쓰기가 들어갔었던 index 부분에 빈칸을 더해주면 되지않을까.. 생각했었다.

 

직관적으로 이해가 쉬웠던 답안

https://joycestudios.tistory.com/115

var answer = String()
// sepratedBy 함수를 통하여 공백 기준으로 문자열 배열을 구합니다.
let array = s.components(separatedBy: " ")
for s in array {
   for (index, c) in s.enumerated() {
      answer.append(Int(index) % 2 == 0 ? c.uppercased() : c.lowercased())
   }
   // 문자열 변환 완료 후에는 마지막 문자로 공백 입력
   answer.append(" ")
}
// 마지막 공백은 필요없으므로 제거
answer.removeLast()
    
return answer

 

많이 간추린 답안

import Foundation
func solution(_ s:String) -> String {
    let a = s.components(separatedBy: " ").map { $0.enumerated().map { $0.offset % 2 == 0 ? $0.element.uppercased() : $0.element.lowercased() } }
    return a.map{ $0.map { $0 }.joined() }.joined(separator: " ")
}

느낀점

아 다행이다! 그래도 map으로 접근해야겠다는 생각까지는 맞았다.

enumerated, offset에 대해서 찾아보고 다시 풀어보기로 한다.

https://sweetdev.tistory.com/313

 

[Swift] 배열도 도는데 index도 찾고싶으면? : enumerated

C의 for문에는 i가 있었다. Swift에서는 배열을 도는데, index를 알고 싶다면 어떻게 해야할까?? firstIndex같은거 들고 삽질하고 있었는데ㅠㅠ 정답은 enumerate!!! 배열.enumerate()과 같은 형태로 쓰면 된다.

sweetdev.tistory.com

enumerated를 이용하면 offset과 element로 키와 값을 value화 할 수 있다.

728x90
반응형