개선 코드
직접 계산
반복문 안 쓰고, 배열 인덱스로 직접 접근 (가로 * 세로 * 높이) <- 상자가 고정되어 있어서 가능, 반복문 오버헤드 없어서 더 빠름
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);
'C# > 복습 완료' 카테고리의 다른 글
| 문자열 정렬하기 (2) (복습 완료) (0) | 2025.09.02 |
|---|---|
| 직각삼각형 출력하기 (복습 완료) (0) | 2025.08.14 |
| [C#]숨어있는 숫자의 덧셈(1) - 복습 완료 (0) | 2025.08.07 |
| [C#]문자 반복 출력하기 (프로그래머스) - (복습 완료) (0) | 2025.08.07 |