티스토리 뷰
백준 2941 크로아티아 알파벳 문제설명
백준 2941번, 크로아티아 알파벳은 입력받은 문자열의 크로아티아 알파벳 갯수를 출력하는 기초문제입니다.
크로아티아 알파벳은 우측 변경 열의 문자열을 기준으로 확인하면 됩니다. 위 표에 있는 문자열은 여러개의 문자로 이루어 졌을지라도 하나의 알파벳으로 인식해야합니다. 또한 표에 없는 문자는 문자하나당 알파벳 한개로 인식하면 됩니다.
입출력 예시도 이어서 보도록 하겠습니다.
먼저 최대 100글자의 단어가 주어집니다. 주어진 문자열에서 크로아티아 알파벳이 몇개인지 출력하면 됩니다. 곧바로 이어서 swift언어를 통해 백준 2941, 크로아티아 알파벳 문제 풀어보겠습니다.
백준 2941, 크로아티아 알파벳 swift 풀이
Hash 자료구조, Set과 contains 메서드 활용하기
이 문제에서는 크로아티아 문자가 있는지 확인할 때 Set 자료구조를 활용해보겠습니다. 딕셔너리(dictionary)를 사용해도 문제없고, 해시 자료구조를 사용하지 않고 풀수도 있지만, 저는 Set를 사용해서 푸는것이 이번 포스팅의 목적이었으므로 Set을 사용해보겠습니다.
Set은 Hashable 프로토콜을 채택한 값을 취급할 수 있는 해시 자료구조입니다. dictionary처럼 중복된 값을 체크할 수 있고, 차집합 / 합집합 / 여집합 / 교집합 등의 다양한 연산을 수행할 수 있어 유용한 자료구조입니다.
2행) Set<String> 타입의 dic은(변수명은 넘어가주세요 ㅎㅎ 😂) 표에 정의된 크로아티아 알파벳을 정의해둡니다. 이후 contains 메서드를 활용해서 크로아티아 알파벳 카운팅 간 사용됩니다.
3행) 입력받은 문자열은 [Character] 타입의 배열로 변환시켜서 풀어봤습니다.
4 ~ 6행) len은 배열의 최대길이, count는 크로아티아 알파벳 카운팅 목적, idx는 배열 순회 간 인덱스로 사용할 예정입니다.
8행) while문을 통해서 문자열을 순회하고, 표에 있었던 크로아티아 알파벳이 있는지 확인합니다.
9행) defer는 while문이 한번 반복되어 종료될때의 연산을 적어두면 좋습니다. 중복되는 코드를 줄이는 효과가 있습니다. 위의 경우 반복 연산 한번이 종료될때마다 공통적으로 수행해야 할 알파벳 카운팅 및 인덱스 증가를 시켜주고 있습니다.
11 ~ 18행) 현재 idx 인덱스를 기준으로 문자열에서 2 / 3자리의 문자를 만들고 two, three 변수에 저장합니다. 이후 set의 contains메서드를 통해 해당 2 / 3자리의 문자열이 크로아티아 알파벳인지 확인합니다.
20 ~ 24행) Set 자료구조의 contains 메서드를 통해 2 / 3자리의 문자열이 크로아티아알파벳인지 확인합니다. 만약 크로아티아알파벳이라면 2 / 3자리 문자열 중 몇자리 문자열이나에 따라 idx를 추가로 증가시켜 줍니다. 크로아티아알파벳 다음 자리의 idx로 이동해서 다시 알파벳을 찾기 위함입니다.
swift Set의 contains 메서드 시간복잡도는 일반적으로 O(1)입니다.
만약 2 / 3자리의 크로아티아 알파벳이 없었다면 현재 탐색중인 arr[idx] 문자는 문자 하나를 크로아티아 알파벳으로 간주해야 합니다. 이 경우에도 알파벳 카운팅을 합니다. 그 부분은 앞서 말한 defer { ... } 부분에서 공통적으로 카운팅 연산을 수행합니다.
위와 같이 카운팅 연산을 반복 수행하고 문자열을 모두 훑었다면 크로아티아알파벳을 카운팅한 값이 있는 count 변수를 출력해주면 끝납니다. 🤗
'알고리즘 정보 > Swift 알고리즘' 카테고리의 다른 글
swift reduce 기초예제, 프로그래머스 레벨1 내적 풀이 (0) | 2021.02.15 |
---|---|
스위프트 DFS 백트래킹 예제, 백준 10974 모든순열 풀이 (0) | 2021.02.14 |
swift swapAt 배열 스왑 예제, 백준 2947 나무조각 풀이 (0) | 2021.02.12 |
swift언어 reduce 고차함수 예제, 백준 1037 약수 풀이 (0) | 2021.02.11 |
프로그래머스 카카오공채문제, 신규아이디추천 swift 풀이 (0) | 2021.02.07 |
- Total
- Today
- Yesterday
- 알고리즘문제
- SwiftUI
- 백준알고리즘
- publisher
- 부스트코스
- swift언어
- 백준swift
- 알고리즘
- createML
- swift string
- swift 문자열
- swift reduce
- 김프매매
- 개발자문서
- 프로토콜
- swift 기초
- CoreML
- Collection
- Protocol
- 스위프트
- swift
- swift문제
- Swift 알고리즘
- uikit
- 프로그래머스swift
- 프로그래머스
- 컬렉션
- swift알고리즘
- 자연어처리
- ios
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |