안녕하세요
백준 알고리즘 단계별로 풀어보기 6단계 함수를 풀어봤습니다
이번 문제는 지금까지의 제출 방식과는 많이 틀려서 문제를 처음 봤을 때 굉장히 당황했습니다;;
예제는 없고 어떤 언어로 제출하라는 문제밖에 없습니다
어떻게 제출하는거야!!!!
잠깐 멘붕이 왔다가 어쨋든 문제를 작성해서 제출을 하려고 눌러보니 어느정도 작성예시가 있어서 그것을 보고 문제를 풀었습니다 ㅎ
이번 함수 문제도 다양한 방식으로 풀고 싶었는데 문제가 단순해서 문법만 다르게해서 똑같은 방식으로 풀어봤습니다
이제 제가 풀은 방식에 대해서 설명하겠습니다!!
문제 링크입니다
문제
정수 n개가 주어졌을 때, n개의 합을 구하는 함수를 작성하시오.
작성해야 하는 함수는 다음과 같다.
- C, C11, C (Clang), C11 (Clang): long long sum(int *a, int n);
- a: 합을 구해야 하는 정수 n개가 저장되어 있는 배열 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)
- n: 합을 구해야 하는 정수의 개수
- 리턴값: a에 포함되어 있는 정수 n개의 합
- C++, C++11, C++14, C++17, C++ (Clang), C++11 (Clang), C++14 (Clang), C++17 (Clang): long long sum(std::vector<int> &a);
- a: 합을 구해야 하는 정수 n개가 저장되어 있는 배열 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)
- 리턴값: a에 포함되어 있는 정수 n개의 합
- Python 2, Python 3, PyPy, PyPy3: def solve(a: list) -> int
- a: 합을 구해야 하는 정수 n개가 저장되어 있는 리스트 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)
- 리턴값: a에 포함되어 있는 정수 n개의 합 (정수)
- Java: long sum(int[] a); (클래스 이름: Test)
- a: 합을 구해야 하는 정수 n개가 저장되어 있는 배열 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)
- 리턴값: a에 포함되어 있는 정수 n개의 합
- Go: sum(a []int) int
- a: 합을 구해야 하는 정수 n개가 저장되어 있는 배열 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)
- 리턴값: a에 포함되어 있는 정수 n개의 합
출처
- 문제를 만든 사람: baekjoon
알고리즘 분류
제출할 수 있는 언어
C++17, Java 8, Python 3, C11, PyPy3, C99, C++98, C++11, C++14, Python 2, PyPy2, Go, C99 (Clang), C++98 (Clang), C++11 (Clang), C++14 (Clang), C11 (Clang), C++17 (Clang)
채점 및 기타 정보
- 예제는 채점하지 않는다.
문제 풀이
먼저 알고리즘을 제출해봅니다
어떻게 제출해야하는지 힌트가 나옵니다
저도 지금까지 어떻게 정답을 제출해야할지 고민을 하다가 이것을 보고 아! 이렇게 제출하면 되는구나 깨달았습니다 ㅠ
1. 제가 맨 처음 정답을 맞춘 방식입니다
제일 무난한 방법이라고 생각합니다
for문을 사용해서 합계를 구해 합계를 return해줍니다
public class Test {
// 합을 구하는 메소드 선언
long sum(int[] a)
{
// 합계를 입력할 변수 선언
long sum = 0;
// 반복문을 사용해 a배열의 데이터를 sum에 계산
for(int i = 0; i < a.length; i++)
{
sum += a[i];
}
// 결과return
return sum;
}
}
2. 두 번째로 풀은 방식은 향상된 for문을 사용하여 합계를 구해 return해줍니다
public class Test {
// 합을 구하는 메소드 선언
long sum(int[] a)
{
// 합계를 입력할 변수 선언
long sum = 0;
// 향상된 반복문을 사용 합계를 구함
for(int i : a)
{
sum += i;
}
// 결과return
return sum;
}
}
3. 세 번째로 풀은 방식은 while문을 사용하여 풀었습니다
방식 자체는 위와 같습니다
public class Test {
// 합을 구하는 메소드 선언
long sum(int[] a)
{
// 합계를 입력할 변수 선언
long sum = 0;
int count = 0;
// while문을 사용 합계를 구함
while(count < a.length)
{
sum += a[count];
count++;
}
// 결과return
return sum;
}
}
여기까지 제가 풀은 세 가지 방법이었습니다
이제 3가지 구문의 속도를 비교해보겠습니다!!
어느 방법이 제일 빠를까요??
속도 비교
중간에 틀렸습니다는 그냥 넘어가주세요 ㅠ_ㅠ
1. 일반 for문
2. 향상된 for문
3. while문
으로 풀었을 때의 메모리와 시간입니다
속도는 향산된 for문과 while문으로 풀었을 때의 속도가 같네요
그런데??? 일반for문이 왜 속도차이가 이렇게 나는지는 잘 모르겠네요;;
똑같을거 같은데;;
메모리는 향상된 for문이 제일 빠르게 나왔습니다
이상 백준 알고리즘 15596번 문제 정수 N개의 합을 풀은 내용이었습니다
이 글이 알고리즘을 공부하는 분들께 도움이 되었으면 좋겠습니다!!!
다음 문제 : 2021.05.09 - [알고리즘/알고리즘JAVA] - [백준알고리즘/함수] 4673번 문제 : 셀프 넘버(자바/JAVA)
'알고리즘 > 알고리즘JAVA' 카테고리의 다른 글
[백준알고리즘/함수] 1065번 문제 : 한수(자바/JAVA) (0) | 2021.05.10 |
---|---|
[백준알고리즘/함수] 4673번 문제 : 셀프 넘버(자바/JAVA) (0) | 2021.05.09 |
[백준알고리즘/1차원 배열] 4344번 문제 : 평균은 넘겠지(자바/JAVA) (0) | 2021.05.07 |
[백준알고리즘/1차원 배열] 8958번 문제 : OX퀴즈(자바/JAVA) (0) | 2021.05.06 |
[백준알고리즘/1차원 배열] 1546번 문제 : 평균 (0) | 2021.05.05 |