[Java] 코딩테스트 기초문법 - 3 : 배열, 리스트의 합계 구하기

DEINGVELOP·2022년 8월 8일

리스트/배열의 합계 구하기

💡 기존의 많은 언어들이 제공하는 SUM 기능이 Java에는 없다!!

  1. for문으로 구하기
  2. stream 사용하여 lambda함수 사용하기

    ✔ 주의! 속도적으로는 일반적으로 stream 람다 방식이 loop문보다 비효율적이다.



for문으로 list의 합계 구하기

1. for 이용

int sum = 0;
for (int i = 0; i < list.size(); i++)
	sum += list.get(i);
return sum;
  • .size : 리스트안에 들어있는 원소 수 구하기
    - .length : 배열의 길이(전체 크기!) 구하기
    - .length() : 문자열의 길이 구하기

    💡 잠깐!
    배열과 리스트는 차이가 있다. 구체적인 내용은 다음 포스팅에서 정리하도록 하고, 이번엔 우선 가장 중요한 차이만 짚고 넘어가자.

    📌 Java의 Array vs ArrayList vs List

    • Array(배열) : 클래스
      • index는 값에 대한 유일무이한 식별자(고유함)
      • 객체 생성시 크기 할당 필수
      • 길이 조정 불가

    • ArrayList : 클래스
      • List 인터페이스를 상속받은 클래스 중 하나
      • index는 몇 번째 데이터인가를 가리킴 (그 공간이 비면 다른 데이터가 대체 가능)
      • 크기 할당 필요 없음! (Java에서는 자동으로 1.5배씩 늘어남)

    • List(리스트) : 인터페이스
      • 크기가 정해져있다는 배열의 한계로 만들어진 인터페이스
      • 동적으로 자료형의 개수를 늘릴 수 있다.
  • .get(index) : 이 인덱스의 위치에 있는 객체 반환


2. for each 이용

int sum = 0;
for(int i : list)
	sum += i;
return sum;
  • for(int i : iterate한 객체) : iterate한 객체에서 한 개씩 순차적으로 i에 대입되어 for문이 수행됨



Streams

: 람다를 활용할 수 있는 기술 중 하나. 데이터의 흐름.

  • Java 8에서 추가되었다. (이전에는 배열, 컬렉션 인스턴스를 다루는 방법은 for 또는 foreach문을 돌면서 하나씩 꺼내서 다뤄야 했음)

  • 배열과 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있음

  • 람다를 이용해서 코드의 양을 줄이고 간결하게 표현할 수 있음

    👉🏻 즉, 배열과 컬렉션을 함수형으로 처리할 수 있음

  • 간단히 병렬처리(Multi-Threading)가 가능함. 하나의 작업을 둘 이상의 작업으로 잘게 나누어 동시에 진행하는 것이 가능함. 즉, 쓰레드를 이용해 많은 요소들을 한 번에 처리 가능


1. stream을 이용하여 List의 합계 구하기

  • Stream.of(리스트).mapToInt(i -> i).sum(); : 기본형 특화 스트림에서만 사용 가능함
  • Sream.of(리스트).reduce(0, Integer::sum); : reduce(초기값, 연산) 형식으로 사용함. 초기값부터 각 원소를 차례대로 순회하며 연산 수행. 이전 연산의 결과를 다음 연산의 초기값으로 넘김

2. stream을 이용하여 Array의 합계 구하기

  • import java.util.Arrays; 한 후 Arrays.stream(배열이름).sum();



참고자료

0개의 댓글