[프로그래머스 Lv.0] 369 게임

Jamong·2023년 3월 6일
0

코딩테스트 입문 [Lv. 0]
2023.02.27


문제 설명

머쓱이는 친구들과 369게임을 하고 있습니다. 369게임은 1부터 숫자를 하나씩 대며 3, 6, 9가 들어가는 숫자는 숫자 대신 3, 6, 9의 개수만큼 박수를 치는 게임입니다. 머쓱이가 말해야하는 숫자 order가 매개변수로 주어질 때,머쓱이가 쳐야할 박수 횟수를 retrun 하도록 solution 함수를 완성해 보세요. 

제한 사항

  1. order 의 크기는 1보다 크거나 같고 1,000,000보다 작거나 같다. 

로직 설계

1. Charater 타입 배열을 생성 하고, 입력받을 order의 숫자를 String으로 타입 변환하여 배열에 추가한다.

2. 배열의 값을 하나씩 빼서 Int형으로 변환하고 3으로 나누어 떨어지고 배열의 값이 0이 아닐 때 count를 1씩 추가한다.

3. count 값을 return 해준다. 

코드 구현

import Foundation

func solution(_ order:Int) -> Int {
	// 제한 사항
	guard 1...1000000 ~= order else { return 0 }
	
	// 문제 풀이
	var arrayList: [Character] = []
	var count: Int = 0
	
	for i in String(order) {
		arrayList.append(i)
	}
	
	for i in arrayList{
		if i.wholeNumberValue! % 3 == 0 && i.wholeNumberValue! != 0 {
			count += 1
		}
	}
	
	return count
}

[제한사항]

guard 문을 이용하여 order의 크기를 잡고, 범위에 충족하지 않으면 0을 return 하는 코드를 작성하였다.

[문제 풀이]

1. order 값을 문자로 담아줄 arrayList 배열 변수와 return해 줄 count 변수를 생성하였다.

2. for문을 이용하여 정수타입 order을 문자열로 변환하여 문자 하나씩 arrayList에 추가하였다.

3. arrayList의 문자들을 하나씩 가져와 wholeNumberValue과 암시적 언랩핑(Implicitly Unwrapping)으로 정수타입으로 변환하고, 3으로 나누었을 때 나머지가 0이고 arrayList의 문자가 0이 아닐 때 count의 숫자를 1씩 증가하게 하였다.

4. count 값을 return 했다.

wholeNumberValue 설명

wholeNumberValue 대신에 Int(String(i))! 로 쓸 수 있다.

[풀면서 문제 있었던 부분]

wholeNumberValue를 찾아보기 전에 Character 타입을 Int형 타입으로 바로 캐스팅하면 될 줄 알았다.

그러나 Character 문자타입에서 Int 정수형 타입으로 바로 안되고 String 문자열로 캐스팅 하고 난 뒤에 Int형으로 캐스팅이 가능했다.

다른 코드 

다른 사람들이 구현한 코드를 가져와 분석해 보았다.

import Foundation

func solution2(_ order:Int) -> Int {
	return String(order).filter { "369".contains($0) }.count
}

이 코드 같은 경우에는

1. 정수 타입 order 값을 문자열 타입으로 변환하여 문자열을 하나씩 3, 6, 9가 들어있는지 확인하고 있다면 filter로 걸러내 저장한다. 

2. filter로 걸러진 문자의 갯수를 count로 return 한다.

profile
새해 목표 : 1일 1 깃, 블로그, 프로그래머스 2문제

0개의 댓글