티스토리 뷰
1. 문제 : 그룹 단어 체커
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때
www.acmicpc.net
2. 아이디어
정수를 입력받고 입력받은 정수만큼 for문을 돌면서 word라는 변수에 단어를 입력받는다. 입력받은 단어를 문자단위로 배열에 넣어 단어 수 만큼 for문을 돌면서 배열안에 문자들을 검사한다.
- 30분 시간을 잡고 문제를 풀다가 단어의 문자들을 어떻게 검사할 지에 대한 생각이 없어서 시간초과가 났다. 조금만 더 생각하면 풀 수 있을거 같았지만 시간상의 여유로 .. 내가 제시한 아이디어와 제일 유사한 블로그를 참고 했다.
3. 코드
let n = Int(readLine()!)! //단어 개수
var count = 0
for _ in 0..<n {//n만큼 단어 읽기
let word = readLine()!
var arr : [Character] = []
var token = false
for i in word {
if !arr.contains(i) {//배열안에 문자가 포함되어있지 않을 경우 포함시켜줌
arr.append(i)
} else { //배열안에 문자가 들어있을 경우
if arr.last != i { //만약 마지막배열에 있는 문자와 i가 같지 않다면
token = true //그룹단어 임을 체크
}
}
}
if !token {
count += 1;
}
}
print("\(count)")
1) 첫줄에 단어 개수 n을 입력받고 for문을 통해 n을 반복하면서 단어를 입력받는다. 입력받은 단어의 문자하나하나를 넣을 배열을 만들고, 전체 단어 만큼 반복문을 돌아 조건문을 생성한다.
2)블로그 참고 했던 부분
반복문을 돌면서 만약 배열안에 포함되지 않은 문자가 있을 경우 배열에 포함시켜준다.
배열안에 포함되어있는 문자일 경우 마지막 배열에 있는 문자와 i가 같지 않다면 그룹단어로 인식하여 bool타입을 통해 true로 체크하여 카운트에 넣어준다.
?
참고 했던 부분 중에서 제일 헷갈렸던 부분이 왜 배열 마지막에 있는 문자와 비교해야 하는지, 예외도 있을 거 같다는 생각이 있어서 머릿속으로 정리가 되지 않았는데 코드 설명하면서 이해가 되어버렸다 .. ^^
예를 들어 abca 라는 단어가 입력이 됐다고 가정했을때 a라는 문자를 for문을 통해 검사하면서 배열에 이미 있는 문자이기 때문에 else부분으로 가서 마지막 배열 원소가 a로 들어왔기 때문에 abca 는 그룹단어가 아니게 된다.
참고
https://sapjilkingios.tistory.com/entry/Swift-%EB%B0%B1%EC%A4%80-1316%EB%B2%88
'Algorithm > 백준' 카테고리의 다른 글
| 백준 - 17609 swift (0) | 2024.05.26 |
|---|---|
| 백준 - 16173 swift (0) | 2023.11.18 |
| 백준 1260 : DFS와 BFS (0) | 2023.11.14 |
- Total
- Today
- Yesterday
- ObservableObject
- SWIFT
- rxswift
- Swift Format
- Xcode
- internal Combine
- CoreData
- UIKit
- XCTest
- Task
- closure
- 스위프트
- 코딩테스트
- ios
- SnapshotTest
- Swift Concurrency
- group tasks
- foundation models
- 프로그래머스
- combine
- 클로저
- unstructed task
- asyne-let
- Fastlane
- detached task
- UITest
- prepareForReuse
- swiftUI
- awakeFromNib
- 백준
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |