C#/복습 완료

주사위의 개수 (복습 완료)

게임 개발은 즐거워 2025. 8. 21. 08:57

개선 코드

직접 계산

반복문 안 쓰고, 배열 인덱스로 직접 접근 (가로 * 세로 * 높이) <- 상자가 고정되어 있어서 가능, 반복문 오버헤드 없어서 더 빠름

using System;

public class Solution {
    public int solution(int[] box, int n) {
        return (box[0] / n) * (box[1] / n) * (box[2] / n);
    }
}

 

LINQ 사용

using System;
using System.Linq;


public class Solution {
    public int solution(int[] box, int n) {
        return box.Select(length => length / n).Aggregate(1, (a, b) => a * b);
    }
}

box.Select(length => length / n) : 배열의 각 요소를 length / n으로 변환

[10, 8, 6] -> [5, 4, 3]

.Aggregate(1, (a, b) => a * b)  : 누적

초기값 : 1부터 시작

누적 연산 : 곱셈으로 누적

람다식 : (a, b) => a * b : a와 b를 곱해라 

 

 

 

 

제출한 답 + 풀이과정 

using System;

// 입력 : 상자 가로, 세로, 높이 정수 배열 box, 주사위 모서리 길이 정수 n
// 출력 : 상자에 들어갈 수 있는 주사위 최대 개수 정수 answer 
public class Solution {
    public int solution(int[] box, int n) {
        //int answer = 0; // <- int answer만 해주면 왜 안 됨? null 안 들어가나?
        int answer = 1;
        
        // 가로, 세로, 높이 싹 다 n으로 나눠서 (올림 <- ceiling? 안하고, 그냥해도 될듯)
        // 세 값을.... 322 곱하기 ! 
        
        foreach (int length in box)
        {
            //Console.WriteLine(length);
            Console.WriteLine(length / n);
            // 왜 안 되징? length는 잘 들어옴! 
            
            // length / n도 잘 들어옴, 왜 곱하기 안 됨?! 
            
            answer *= length / n; // 아 answer가 0이라.....
            //answer =* length / n; // 이건 안 되는데, 흠 
        }
        
        
        return answer;
    }
}

1. Length : 무조건 대문자 Length! 

-> 사용 : 배열([]), 문자열(string)

cf. List : Count 

 

2. 로직에 문제가 없다고 생각했는데 정답이 0으로만 출력

-> 0이 곱해지고 있어서였고, 1로 수정해주니 해결완료 (기본값 의심해보기

 

3. int answer;이 안 되고, 기본값을 설정해줘야 하는 이유

-> 지역변수 : 기본값이 자동으로 들어가지 않음 (= 초기화 필요!)

=> int, string, bool 등 무조건 사용하기 전에 반드시 값을 할당해주거나 초기화가 필요 ! 

자동화가 되는 경우 : 클래스 필드 

지역변수는 반드시 초기화 필요 !! 

 

4. 정수 나눗셈 : 소수점 버림

cf. 버림 -> Math.Floor() (같은 결과)

answer *= (int)Math.Floor((double)length / n);