TIL/알고리즘 공부

백준 10809번 Swift 알고리즘 연습

여의도사노비 2022. 8. 12. 17:23
728x90

이 문제는 사실상 모르겠어서 검색하여 풀었다. 그냥 논리적 흐름만으로는 풀 수 없다는 것을 깨달았기에...

덕분에 asciiValue, UnicodeScalar 등을 사용해 볼 수 있었다.

 

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

  1. 처음 문제를 풀때는 a...z 까지 집합을 하나 만들어 놓고
  2. 입력받은 값 value의 원소와 a...z 집합의 원소를 한번씩 비교해서 값이 같지 않으면 -1을 출력하고
  3. 값이 같으면 몇번째 value 원소였는지를 확인하여 그 값을 반영한다
  4. 이렇게 생각을 했지만 막상 비교하려니 문자의 값을 코드로 변환하는 법을 모르겠어서 찾다가 다른 방식을 발견했다
  5. a...z 까지 for 문으로 바로 범위를 만들어주고 입력받은 value 안에 a...z 범위안의 UnicodeScalar가 동일하게 존재하는지 확인하고 있다면 그것의 위치를 index로 바로 받는다.
  6. 그 외엔 -1을 출력한다.

 

index라는 단순한 호출형태가 존재하고 있는데 직접 집합 내 원소의 위치를 num += 1 이런식으로 구하려고 생각했던 것이 아직도 Swift 초짜구나 라는 생각이 들게 했다.

 

* 10809번

let value = Array(readLine()!)
for i in Character("a").asciiValue!...Character("z").asciiValue! {
    var char = Character(UnicodeScalar(i))
    
    if value.contains(char){
        print("\(s.index(of: char)!)",terminator: " ")
    } else {
    print("-1", terminator: " ")
    }
}

 

 

정리(Today I Learned)

  1. asciiValue, unicodeScalar, index 등 Swift가 자체적으로 내포하고 있는 기능을 기억하자!