swift문법

[SWIFT]백준 1316 그룹단어체커

화찌님 2022. 12. 24. 17:27


<코드>

//
//  main.swift
//  BOJ
//
//  Created by leehwajin on 2022/12/24.
//

import Foundation

let n = Int(readLine()!)!

//영어배열채워넣기
var arr:Array<Int> = []

for _ in 0...25{
    arr.append(0)
}

var numbers = 0




for times in 1...n{
    //문자 받기
    let input = Array(readLine()!)
    
    //arr초기화
    for i in 0...arr.endIndex-1{
        arr[i] = 0
    }
    
    //영어와 숫자 매칭시키기
    var input1:Array<Int> = []
    for i in 0...(input.endIndex-1){
        input1.append(Int(input[i].asciiValue!))
        if (input1[i] >= 97) {
            input1[i] -= 97
        }else if (input1[i] >= 65){
            input1[i] -= 65
        }
    }
    
    //본격적으로 제발

    for i in 0...input.endIndex-1 {
        arr[input1[i]] += 1
        if arr[input1[i]] != 1{
            if input[i] == input[i-1]{
                if i == input.endIndex-1{
                    numbers += 1
                    break
                }
                continue
            }else{break}
        }
        else if(i == input.endIndex-1) {
            numbers += 1
        }
    }
    if times == n{
        print(numbers)
    }
}

쓰다보니 지저분한 코드가 되었지만,,,, 

arr함수에 0~25까지 0으로 세팅

입력값은 대/소문자 상관없이 a는 0, b는 1... 로 변환시켜서(input > input1)

input1에 1이 들어가있을 경우 arr[1]에 1을 추가해주고, 추가했을때 1보다 높은 경우(중복문자)

앞문자를 확인하여 같은 문자면 continue 다른 문자면 그룹단어가 아니라고 판단 후 break처리를 함으로써 

그룹단어의 갯수를 세었다.

 


<문제를 통해 배운점>

스위프트 문법에선 빈 배열을 만들었으면 그 안에 쓰레기 값이 들어가있는게 아니고 정말 빈 배열이기 때문에(칸자체가 없어서 대입이 안됨)

새 요소를 추가하려면 append함수를 꼭 써주어야 한다!!!!

(C언어에서는 배열을 선언할때 배열의 칸갯수를 지정할 수 있어서 지정시 안에 쓰레기값이 들어갔지만, 스위프트는 지정할 수가 없기 때문에 !!!! 쓰레기값도 안들어가있는 정말 '빈배열'이다 !!!!)