알고리즘/문제 풀이 비법

Do it! 코딩테스트-기초편. 3_자료구조

Leo.K 2023. 3. 13. 23:28

자료구조란? 

자료구조는 데이터를 효율적으로 저ㅗ장, 접근, 수정하기 위한 그릇입니다. 
코딩 테스트에서는 각 문제에 주어진 입력 데이터의 형태와 사용해야 하는 알고리즘에 따라 적절한 자료구조를 선정해 사용하는 것이 매우 중요하다. 

3-1 배열과 리스트

기본 자료구조인 배열과 리스트는 비슷한 점도 많지만 다른 점도 많다. 두 자료구조의 특징을 정확하게 이해하고 문제가 요구하는 조건에 따라 적절하게 선택해 사용하는 것이 중요하다.  

배열 

배열은 메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조이다. 배열의 값은 인덱스를 통해 참조할 수 있으며, 선언한 자료형의 값만 저장할 수 있다. 다음 그림은 배열을 나타낸 것이다. 그림을 보면 배열에 값1, 값2, ... 값6이 채워져 있고, 각 값은 0부터 5까지 인덱스가 지정되어 있다.

배열의 특징 

  1. 인덱스를 사용하여 값에 바로 접근할 수 있다. 
  2. 새로운 값을 삽입하거나 특정 인덱스에 있는 값을 삭제하기 어렵다. 값을 삽입하거나 삭제하려면 해당 인덱스 주변에 있는 값을 이동시키는 과정이 필요하다.  
  3. 배열의 크기는 선언할 때 지정할 수 있으며, 한 번 선언하면 크기를 늘리거나 줄일 수 없다. 
  4. 구조가 간단하므로 코딩테스트에서 많이 사용한다.

리스트 

리스트는 값과 포인터를 묶은 노드라는 것을 포인터로 연결한 자료구조이다. 
이때, 노드는 컴퓨터 과학에서 값, 포인터를 쌍으로 갖는 기초 단위를 부르는 용어이다. 

\

리스트의 특징

  1. 인덱스가 없으므로 값에 접근하려면  Head 포인터부터 순서대로 접근해야 한다. 다시 말해 값에 접근하는 속도가 느리다. 
  2. 포인터로 연결되어 있으므로 데이터를 삽입하거나 삭제하는 연산 속도가 빠르다. 
  3. 선언할 때 크기를 별도로 지정하지 않아도 된다. 다시 말해 리스트의 크기는 정해져 있지 않으며, 크기가 변하기 쉬운 데이터를 다룰 때 적합하다. 
  4. 포인터를 저장할 공간이 필요하므로 배열보다 구조가 복잡하다.

 

연습 문제 

https://www.acmicpc.net/problem/11720

 

11720번: 숫자의 합

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

www.acmicpc.net

 

문제 분석하기 

- 주어진  N의 값을 자료구조의 크기로 사용하자. 
- 값은 문자열로 주어지지만 숫자임이 확실하기 때문에 split메서드를 사용하여 한 글자씩 끊어서 문자열 배열을 만든다. 
- 값이 0인 경우는 건너뛰고 나머지는 변환 함수 Integer.parseInt()를 사용하여 특정 변수에 누적 합을 구한다. 

코드 구현하기

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        String su = br.readLine();

        String temp[] = su.split("");

        int sum = 0;
        for(String s : temp){
            if(s.equals("0")) continue;
            sum += Integer.parseInt(s);
        }

        System.out.println(sum);
    }
}

'알고리즘 > 문제 풀이 비법' 카테고리의 다른 글

동적 계획법 (Dynamic Programming)  (0) 2023.06.26
알고리즘 선택의 기준_시간복잡도  (0) 2023.03.06
조합 Combination  (0) 2022.11.02
최소공통조상  (0) 2022.10.26
트리  (0) 2022.09.21