티스토리 뷰

Algorithm/Baekjoon

[Swift] 백준 20291: 파일정리

내일은개발천재🎵 2022. 5. 15. 19:57

 

  문제  

https://www.acmicpc.net/problem/20291

 

20291번: 파일 정리

친구로부터 노트북을 중고로 산 스브러스는 노트북을 켜자마자 경악할 수밖에 없었다. 바탕화면에 온갖 파일들이 정리도 안 된 채 가득했기 때문이다. 그리고 화면의 구석에서 친구의 메시지를

www.acmicpc.net


  알고리즘  

정렬, 자료구조

1. n을 입력받는다.
2. 반복문을 n번 수행한다.
    a. 입력된 정보를 파일명과 확장자로 분리한다.
    b. 딕셔너리에 저장한다. (key = 확장자, value = 횟수
3. key를 기준으로 정렬 한 후 key와 value를 출력한다.

 


  나의 코드  

let n = Int(readLine()!)!
var fileSuffix = [String: Int]()
for _ in 0 ..< n {
	// .을 기준으로 확장자와 이름 나누기
    let file = readLine()!.split(separator: ".").map{ String($0) } 
    let (_, suffix) = (file[0], file[1])
    
    if fileSuffix[suffix] != nil { // 이미 딕셔너리에 확장자가 존재한다면
    	fileSuffix[suffix]! += 1 // value를 1만큼 증가
    }
    else {  // 처음 등장한 확장자 명이라면
    	fileSuffix[suffix] = 1 // key, value 선언
    }
}
let result = fileSuffix.sorted{ $0.0 < $1.0 } //key를 기준으로 정렬

for (key, value) in result { // 결과 출력
    print(key, value)
}

  생각과정 

1. 확장자가 나온 횟수를 구해야 한다.

 -> 몇 번 중복되어 나왔는지 계산해야겠다. set 또는 Dictionary를 사용하자.

2. 확장자를 정렬해서 출력해야한다.

  -> Set로 결과까지 정렬하기는 힘들 것 같다. Dictionary를 사용하자.


  Key point!  

📍자료구조의 선택

📍딕셔너리 값 삽입 방법
     -> value의 값을 새로운 값으로 대체하는 것이 아니라, 기존 값을 기반으로 연산을 해야한다.
     -> 만약 새로운 키가 등록되었는데, value가 nil일 경우가 존재할 수 있으므로 조건문으로 해결해야한다.
     (append도 마찬가지입니다. 비어있는 value에 append를 하게되면 nil exception이 발생합니다.


 

'Algorithm > Baekjoon' 카테고리의 다른 글

[Swift] 백준 1181: 단어 정렬  (0) 2022.05.15
[Swift] 15970: 화살표 그리기  (0) 2022.05.15
[Swift] 백준 10825: 국영수  (0) 2022.05.12
[Swift] 백준 15649: N과 M(1)  (0) 2022.05.08
[Swift] 백준 7576: 토마토  (0) 2022.04.23
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함