안녕하세요
백준 알고리즘 단계별로 풀어보기 6단계 함수를 풀어봤습니다
이번 문제는 지금까지의 제출 방식과는 많이 틀려서 문제를 처음 봤을 때 굉장히 당황했습니다;;
예제는 없고 어떤 언어로 제출하라는 문제밖에 없습니다
어떻게 제출하는거야!!!!
잠깐 멘붕이 왔다가 어쨋든 문제를 작성해서 제출을 하려고 눌러보니 어느정도 작성예시가 있어서 그것을 보고 문제를 풀었습니다 ㅎ
이번 함수 문제도 다양한 방식으로 풀고 싶었는데 문제가 단순해서 문법만 다르게해서 똑같은 방식으로 풀어봤습니다
이제 제가 풀은 방식에 대해서 설명하겠습니다!!
문제 링크입니다
15596번: 정수 N개의 합
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)
www.acmicpc.net
문제
정수 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 |