티스토리 뷰

반응형

 

 

 

안녕하세요. iOS Devleoper, 멍구입니다. ^~^

오늘은 백준 단계별 문제풀이의 기초문제 중 하나인 숫자의 개수 2577번 문제를 스위프트언어로 풀어보겠습니다. 그럼 바로 문제 설명 들어가보겠습니다. 

 

 


백준 swift 알고리즘, 숫자의개수 2577 문제설명

숫자의 개수는 solved.ac 기준 브론즈2 티어로 기초 알고리즘문제에 해당합니다. 

 

 

문제의 설명이 나와있습니다. 해당 문제의 요지를 보자면 아래와 같습니다. 

"숫자 A, B, C 3개를 입력 받아서 곱한 숫자 값의 각자리 수들에 대해 0 ~ 9 숫자의 빈도수를 구해라!!"

 

 

입력되는 숫자 3개는 각각 100 ..< 1000의 숫자입니다.

세개의 숫자만 곱하면 되므로 100,000,000 미만의 숫자만 들어오겠네요. 수 범위 초과의 문제는 걱정 안해도 될 것 같습니다. 

위의 예제 입력을 보시면, 150, 266, 427를 입력 받았고, 해당 숫자들을 곱한 숫자의 각자리 수를 통해 빈도수를 체크하고 있습니다. 그 결과는 우측에 0 ~ 9의 숫자 빈도수 출력으로 보여지고 있습니다. 

간단한 문제라 설명할게 많이 없었습니다. 바로 스위프트 언어 코드로 구현해보겠습니다. 🤗

 

 


숫자의 개수 2577번 스위프트 언어 문제풀이

2 ~ 3행) A x B x C의 결과를 받을 숫자가 N 변수입니다. 그리고 각 자리 숫자의 0 ~ 9 빈도 수를 카운팅할 배열 dic를 선언했습니다. 예를들면, dic[0]은 0의 갯수, dic[8]은 8의 갯수가 카운팅 되어 저장될 것입니다!

 

 

5 ~ 7행) 이제 숫자를 3행에 걸쳐서 3번 입력받으면 되죠? 그래서 3번 반복하는 반복문을 (0..<3).forEach { _ in ... } 으로 표현했습니다. for _ in {}, while, stride, for _ in 0..<3 등 다양한 반복문 사용방법이 있지만, 이렇게 반복문 실행이 가능하다는 점도 알려드리고 싶었습니다. 

이렇게 3번 입력 받은 값을 Int타입으로 변환 후, N에 곱연산을 수행합니다. 이로써 N에는 A * B * C의 값이 들어갑니다. 

 

 

9 ~ 13행) 이제 앞서 곱의 결과인 N숫자를 한자리 한자리 보면서 해당 값을 배열의 첨자 인덱스로 사용해서 카운팅 합니다. 

예를들면 12345와 같은 숫자는 dic[5] += 1 / dic[4] += 1 / ... dic[1] += 1의 다섯번 연산을 하게 되는 것입니다. 이렇게 카운팅을 하는 것만으로 숫자의개수 문제의 정답을 구할 수 있겠습니다. 

 

 

15행) 앞서 dic배열은 10의 크기를 갖고 있었죠? dic 배열은 ㄴdic[0] ~ dic[9]까지의 배열 범위를 갖습니다. 그 자체만으로 0 ~ 9의 숫자 빈도수를 출력할 수 있는 것입니다. 그러므로 해당 배열의 값을 forEach 순회를 통해 순차적으로 출력합니다. 

이렇게 간단하게 숫자의개수 문제를 스위프트 배열을 사용해 풀 수 있었습니다.

 

 

답이 연습예제 출력값과 동일하게 나오는 것을 확인할 수 있습니다. 실제 제출결과는 아래와 같습니다. 

 

 

 

 

 


오늘은 백준의 단계별 문제풀이의 숫자의개수 2577문제를 스위프트 언어로 풀어봤습니다.

이렇게 좁은 범위의 숫자값 빈도수 저장이 필요할때 해시맵 등의 자료구조없이 배열만으로 카운팅을 할 수 있다는 점 알아두고 적시에 활용하면 좋을 것 같습니다. 👨🏻‍💻

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함