오늘부터 1일 1백준을 실천하려고한다. 하루에 '1문제'라는 큰 숫자는 아니지만 하루하루 꾸준히 하다보면 성과가 있을 것이라고 믿고 무엇보다도 꾸준히 하는 것이 제일 중요하다고 생각이 되었다.
15596번
Java: long sum(int[] a); (클래스 이름: Test)
a: 합을 구해야 하는 정수 n개가 저장되어 있는 배열 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)
리턴값: a에 포함되어 있는 정수 n개의 합
사고과정 : 일단은 long sum(int[] a) 라는 문장이 잘 와닿지가 않았다.
함수를 구현해야 하는 건 알고 있었고 for문으로 sum만 구하면 되겠지? 라고만 생각했던 것 같다.
그저 long type형의 함수였다. 큰 문제는 아니였던 것 같다.
답과 유사하게 코드를 짠 것 같았지만 문제에 대한 이해가 정확하게 되지는 않았던 것 같다.
public class Test1 {
public static void main(String[] args) {
int[] a = new int[]; // int형 a 배열 선언
long sum(int[] a) {
for(int i=0;i<a.length;i++) {
sum+=a[i]; //sum에다가 a[i]번째들을 더해나가며 누적합을 구한다.
}
}
System.out.println("sum"+sum);
}
}
정답 코드
public class Test1 {
long sum(int[] a) {
long sum=0; // sum안에 a 배열 원소의 합을 넣는다.
for(int i=0;i<a.length;i++) {
sum+=a[i]; //sum에다가 a[i]번째들을 더해나가며 누적합을 구한다.
}
return sum; // long형으로 sum이 return 된다.
}
}
만약에 long sum=0; 부분을 int로 주게 되면 return 값이 int 범위에 있다면 자동 형변환이 일어나서 문제 없이 실행된다. 그러나 문제의 조건에서 배열 길이가 a: 합을 구해야 하는 정수 n개가 저장되어 있는 배열 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000) 이었으므로 long형으로 선언해주어야 하는 것이다.
근데, eclipse에서 출력을 해보니 main 메소드가 없다고 자꾸 오류를 출력한다.
Error: Main method not found in class Test1, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
함수명은 sum인데, 매개변수로 (int[] a)로 배열을 받아 객체를 처리한다.
내 코드는 System.out.println(sum)으로 출력하고자 하였는데, 문제에서 함수를 구현하라고 했으므로 함수의 return값으로 값을 반환해주어야 한다.
int의 범위보다 큰 수를 할당하기 위해서는 규칙이 있다. 숫자의 마지막에 L을 붙여야 한다. 그렇지 않으면 컴파일러가 int로 인식하고 에러를 낸다.
public class Main {
public static void main(String[] args){
long val = 2147483648L;
System.out.println(val);
}
}
실행 결과 : 2147483648
L을 붙이지 않고 컴파일을 시도한다면
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The literal 2147483648 of type int is out of range
참고 : https://imasoftwareengineer.tistory.com/48