관리 메뉴

이 세계에선 내가 개발자?

[9093/Swift] 단어 뒤집기 본문

알록리즘/BAEKLOG

[9093/Swift] 단어 뒤집기

민디고 2023. 4. 24. 14:22

*** 언어는 Swift! ***

 

첫번째 알고리즘 스터디가 끝나고 벌써 두번째 스터디가 시작되었다. 이번에 푸는 문제를 사전이 미리 훑어보니까 쪼금 더 어려워지고 이해하기 어려워진 감이 없지 않아 있었다. 그래도 문제 이해하는 것도 하나의 공부니까 열심히 해보자!🥳🥳

 

이번에는 단어 뒤집기라는 제목을 가진 9093번 문제를 풀어보자

자세한 문제는 아래와 같다😎

마찬가지로 이 친구도 문제에 따라 하나 하나씩 나눠보자

 

1. 첫째 줄에는 테스트 케이스의 갯수가 주어진다.

2. 단어와 단어 사이에 공백 기준으로 각 문장을 나눈다.

3. 공백 기준으로 나눠진 문장을 뒤집어서 출력한다.

 

이번에는 문제에서 내용을 다 제공해주지 않아서 예제 입력과 예제 출력을 보며 조금 덧붙여서 적어보았다.

이런식으로 내가 이해하기 쉽게 문제를 나눠봐도 좋은 것 같다.

 

그럼 본격적으로 코드를 짜보자!🙌

 

1. 첫째 줄에는 테스트 케이스의 갯수가 주어진다.

이 부분은 항상 많이 했던 부분이라 빠르게 넘어가보겠다.

이번에 조금 다르게 한 부분이 있는데 저번 스터디 때 다들 이런 식으로 해서 나도 해보기로 했다. 바로 입력 받을 때 부터 타입을 변형해주었다는 것이다.

let t = Int(readLine()!) ?? 0

강제 언래핑이 있어서 예쁜 모양새는 아니지만 아래에서 t를 사용할 때 언래핑 하게 되는 코드를 줄일 수 있으니 이렇게 작성해보기로 했다.

 

다음은 테스트 케이스 갯수 만큼 문장을 입력받아서 저장해준다.

var testCaseArray: [String] = []

/// 테스트 케이스 갯수 만큼 입력받아 저장한다.
for _ in 0..<t {
    let testCase = readLine() ?? ""
    testCaseArray.append(testCase)
}

여기서도 마찬가지로 testCase를 입력받을 때 미리 언래핑을 시켜준 후 배열에 append를 해주고 있다.

 

2. 단어와 단어 사이에 공백 기준으로 각 문장을 나눈다.

이번에는 공백 기준으로 문장을 나눠보자.

말 그대로 Swift에 있는 components를 이용해 공백 기준으로 나눠준다.

for i in 0..<testCaseArray.count {
    /// 공백 기준으로 나눈다.
    var splitArray = testCaseArray[i].components(separatedBy: " ")
}

뒤에 separatedBy는 특정 문자 기준으로 나눌 수 있게 해주는데 저 부분에 " " 를 넣어 공백 기준으로 나눌 수 있도록 설정해준다.

 

다음으로는 공백 기준으로 나눈 배열에 대해 각 배열 값을 뒤집어 줄 것이다.

 

3. 공백 기준으로 나눠진 문장을 뒤집어서 출력한다.

먼저 공백 기준으로 나눠서 저장한 배열 만큼 for 문을 돌린다.

그리고 여기서 조금 마음에 안들지만 tempString 이라는 String 타입의 변수를 만들어 뒤집은 문자를 받아서 다시 배열에 넣어준다.

... for문
 /// 공백 기준으로 나눈 후 각 배열의 값을 뒤집는다
    for j in 0..<splitArray.count {
        var tempString = ""
        for string in splitArray[j].reversed() {
            /// 나눠진 값을 합치기
            tempString += "\(string)"
        }

        /// 합친 값을 다시 배열에 넣어주기
        splitArray[j] = tempString
    }
     /// 전체 문자 합쳐서 출력
     print(splitArray.joined(separator: " "))
}

코드를 보면서 살펴보자면 Swift 문법 중에 reversed 라는 것이 있다. 말 그대로 element를 역순으로 나타내는 뷰를 반환해주는 친구이다.

갑자기 뷰가 나와서 이상하지만 저 친구의 설명이 그렇다고 한다. 하지만 우리는 어찌되었던 역순이 중요하기 때문에 각 배열을 reversed()해서 출력해준다.

reversed()를 for문을 이용해 출력해 주면 만약 happy 라는 문자열이 담겨있는 배열이라면

y

p

p

a

h

이렇게 한 글자씩 역순으로 결과를 보여준다. 이렇게 한 글자씩 뱉는 친구를 합쳐주기 위해 tempString이라는 변수를 만들어 저장해 준 뒤 다시 배열에 넣어주면 yppah 👈 요렇게 배열에 들어가게 된다.

 

이런식으로 공백으로 나누었던 배열 갯수만큼 끝까지 돌리면 모든 배열의 값들이 역순으로 입력되어있게 된다. 아래와 같이 말이다.

["I", "ma", "yppah", "yadot"]

 

마지막으로 이 친구들을 합쳐주면 된다.

 print(splitArray.joined(separator: " "))

 

위와 같이 하면

I ma yppah yadot

 

이렇게 원하는 결과를 얻을 수 있다!

오늘도 한 건 해결!🤩

'알록리즘 > BAEKLOG' 카테고리의 다른 글

[1457/Swift] 방 번호  (0) 2023.04.28
[11656/Swift] 접미사 배열  (0) 2023.04.24
[1427/Swift] 소트인사이드  (1) 2023.04.18
[1292/Swift] 쉽게 푸는 문제  (0) 2023.04.18
[9086/Swift] 문자열  (1) 2023.04.17