TIL/알고리즘 공부

백준 2941번 Swift 알고리즘 연습

여의도사노비 2022. 8. 22. 20:42
728x90

2941번은 특정 문자열이 포함되어 있는지 확인하고 이를 어떻게 인식할지에 대해서 물어보는 문제이다.

이 문제의 경우 처음에 고생을 좀 했다. 첫 논리적 흐름은

1. 특정 문자열이 contain 되어 있는지

2. 있다면 어떻게 이를 제외하고 count를 할 것인지 등에 대한 고민을 하였다.

이는 생각보다 복잡하여 골머리를 앓았는데 매우 적합한 메서드가 있었다.

 

이 문제를 풀면서 생각한 논리적 흐름은

  1. 특정 문자열의 배열을 만들어준다.
  2. 배열 내의 문자열을 input에서 포함하고 있다면 "*"로 변환시켜준다.
  3. 변환된 *를 포함한 문자열의 개수를 센다.

 

사실 이 문제에서 아직도 이해가 가지 않는 부분은

"dz="를 변환할 때, "d" + "z=" 일 수도 있고(count: 2) "dz=" 일수도 있는데(count: 1) 이 부분을 고려하지 않아도 되는 걸까??

하는 의문이 남는다... 하지만 일단 논리적으론 문제 없으니 패쓰~

 

* 2941번

import Foundation

let croatia = ["c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="]

var input = readLine()!

croatia.forEach { croatia in
    input = input.replacingOccurrences(of: croatia, with: "*")
}

print(input.count)

 

정리(Today I Learned)

  1. replacingOccurrences() 메서드는 쉽고 빠르게 특정 문자열을 대체 문자열로 바꿔준다.