카테고리 없음

369게임 (복습 필요)

개발은 즐거워 2025. 9. 6. 19:06

*개선 코드 + Linq 설명 필요

 

정리

1. int 비교 : int 배열로 직접 변환하는 내장 메소드 없음

-> int -> string -> CharArray로 풀어야 함

+) int 배열로 만드는 방법 : 나머지 연산

int order = 123;
List<int> digits = new List<int>();
while (order > 0)
{
    digits.Add(order % 10);
    order /= 10;
}
digits.Reverse();  // [1, 2, 3]

2. 숫자 한 자리씩 끊는 방법

int order = 369;

// 방법 1: string 변환 (가장 쉬움)
char[] chars = order.ToString().ToCharArray();  // ['3', '6', '9']

// 방법 2: 나머지 연산 (수학적)
while (order > 0)
{
    int digit = order % 10;  // 마지막 자릿수
    order /= 10;             // 나머지 제거
}

// 방법 3: LINQ
var digits = order.ToString().Select(ch => int.Parse(ch.ToString()));

각 문자로 끊는 방법

string text = "123";
char[] chars = text.ToCharArray();           // ['1', '2', '3']
var chars2 = text.Select(ch => ch).ToArray(); // LINQ

 

 

개선 코드

Linq 

using System;
using System.Linq;

public class Solution {
    public int solution(int order) {
        return order.ToString().Count(ch => ch == '3' || ch == '6' || ch == '9');
    }
}

설명 : 

 

일반 코드

- (char)(3 + '0') : 불필요한 변환 !

저번 문제는 해당 변환이 필요했고, 이번엔 필요 없는 이유 ????? 

 

-> int에서 char 변환 : (char)(int + '0') 

int -> string -> char 변환 : int.ToString().ToCharArray() 

 

9/6 다시 푼 것

using System;

// 입력 : 말해야하는 숫자 order 
// 출력 : 쳐야할 박수 횟수 
// 3, 6, 9 : 1개씩 증가 
public class Solution {
    public int solution(int order) {
        int answer = 0;
        
        // 배열로 만들기 <- 무슨무슨 방법 가능? (int arr, char arr ?)
        // 1 char arr : 가능 (확실)
        // 2. int arr : 불확실하긴한데, 가능할듯?? 
        
        // 모르는 것 : 숫자 한 자리씩 끊기 !! 
        // 공백 없음 -> split("") 불가능
        
        // 가능해보이는 방법 : string[] = string.Split(new char[0]) : 빈 배열 전달 -> 각 문자로 분리
        // substring 
        
        // 내 방법 : char Arr만들기
        // int -> char : order - '0';
        
        // 에러 : 이거 안 됨 (int -> charArr)
        // 아마도, int -> string -> charArr
        //char[] charArr = order.ToCharArray();
        char[] charArr = order.ToString().ToCharArray();
        
        // 개수 찾아서 계산 or 반복문
        for (int i = 0; i < charArr.Length; i++)
        {
            // int -> char 변환해서 비교 : (char)(int + '0')
            if (charArr[i] == (char)(3 + '0') || 
                charArr[i] == (char)(6 + '0') || 
                charArr[i] == (char)(9 + '0'))
            {
                answer++;
            }
        }

        return answer;
    }
}

 

원래 풀던 것

using System;

// 입력 : 말해야하는 숫자 order
// 출력 : 쳐야할 박수횟수
public class Solution {
    public int solution(int order) {
        int answer = 0;
        
        // 반복문
        if (int i = 1; i <= order; i++)
        {
            if (i == 3 || i == 6 || i == 9)
            {
                answer++;
            }
        }
        
        return answer;
    }
}