본문 바로가기
스터디/묘공단 자바 코딩테스트

[묘공단] 1, 2주 차 코딩 테스트 합격자 되기: 자바 (책 요약)

by 빙수야 팥빙수야 2024. 4. 22.

🎀 1주 차 학습 내용

05-1. 배열 개념

  • 배열 선언 일반적인 방법
int[] arr = {0, 0, 0, 0, 0, 0};
int[] arr = new int[6];

 

배열은 처음 선언할 때 배열의 크기가 결정되고, ArrayList는 크기가 동적이라는 것이다.

따라서 정확한 데이터의 개수를 알 수 있다면 코드가 더 간결하고 속도가 더 빠른 배열을 사용하면 되고, 저장해야 할 데이터의 개수를 정확히 알 수 없다면 ArrayList를 사용하면 된다.

 

  • 2차원 배열
int[][] arr = {{1, 2, 3}, {4, 5, 6}};
System.out.println(arr[1][2]);    // 6
arr[1][2] = 7;
System.out.println(arr[1][2]);    // 7

 

05-2. ArrayList 사용법

  • add() 메서드로 데이터 추가
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
  • 다른 컬렉션의 데이터로부터 초기화
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
ArrayList<Integer> list2 = new ArrayList<>(list);
System.out.println(list2);
  • get() 메서드로 인덱스를 통해 데이터에 접근
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
System.out.println(list.get(0);
  • remove() 메서드로 데이터 삭제
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(3);

list.remove(list.size() - 1);    // 끝에 있는 데이터 삭제
System.out.println(list);

 

05-3. ArrayList의 효율성

  • 배열 연산의 시간 복잡도

배열은 임의 접근이라는 방법으로 배열의 모든 위치에 있는 데이터에 단번에 접근 가능 따라서 데이터에 접근하기 위한 시간 복잡도는 O(1) 입니다.

  • 맨 뒤에 삽입할 경우: 시간 복잡도는 O(1)
  • 맨 앞에 삽입할 경우: 시간 복잡도는 O(N)
  • 중간에 삽입할 경우: 시간 복잡도는 O(N)

 

  • 배열을 선택할 때 고려할 점

데이터에 자주 접근하거나 읽어야 하는 경우 좋은 성능을 낼 수 있습니다.

  1. 할당할 수 있는 메모리 크기를 확인해야 합니다.
  2. 중간에 데이터 삽입이 많은지 확인해야 합니다.

 

05-4. 몸풀기 문제

👓 문제 04. 모의고사

import java.util.*;

class Solution {
    public int[] solution(int[] answers) {
        
        int[] p1 = {1, 2, 3, 4, 5};
        int[] p2 = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] p3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        int[] score = new int[3];
        
        for (int i = 0; i < answers.length; i++) {
            if (answers[i] == p1[i % p1.length]) score[0] += 1;
            if (answers[i] == p2[i % p2.length]) score[1] += 1;
            if (answers[i] == p3[i % p3.length]) score[2] += 1;
        }
        
        int max = Arrays.stream(score).max().getAsInt();
        List<Integer> ansList = new ArrayList<Integer>();
        
        for (int i = 0; i < score.length; i++) {
            if (max == score[i]) 
                ansList.add(i + 1);
        }
        int[] ans = ansList.stream().mapToInt(Integer::intValue).toArray();
        
        return ans;
    }
}

 

🎁 2주 차 학습 내용

06-1. 스택 개념

먼저 입력한 데이터를 제일 나중에 꺼내는 자료구조

이렇게 먼저 들어간 것이 마지막에 나오는 규칙을 선입후출 또는 FILO (First in Last Out)라고 한다.

이때, 스택에 삽입하는 연산을 푸시 (push), 꺼내는 연산을 팝 (pop)이라고 한다.

 

스택 동작 원리 그림

 

06-2. 스택의 정의

- stack 클래스 사용하기

코딩 테스트에서는 문제에 적용할 자료구조 혹은 알고리즘을 파악하는 능력이 중요하다.

  • 데이터를 그냥 저장하고 순서와 상관없이 임의 접근하기만 해도 됨 => 배열
  • 최근에 삽입한 데이터를 대상으로 뭔가 연산을 필요로 함 => 스택
Stack<Integer> stack = new Stack<>();	// 스택 객체 생성

// 스택에 데이터 푸시
stack.push(1);
stack.push(3);

// 스택이 비어 있는지 확인
System.out.println(stack.isEmpty());	// false

// 스택에서 팝
System.out.println(stack.pop());	// 3
System.out.println(stack.pop());	// 1
System.out.println(stack.isEmpty());	// true

 

Stack<Integer> stack = new Stack<>();
stack.push(6);
stack.push(5);

// 스택에 가장 최근에 푸시한 값 (peek)
System.out.println(stack.peek());		// 5
System.out.println(stack.pop());		// 5

// 스택에 들어 있는 데이터 개수 (size)
System.out.println(stack.size());		// 1

 

자바는 java.util.Stack클래스를 통해 Stack(스택) 동작을 제공하고 있다.

java 스택 사용법

 

06-3. 몸풀기 문제

👓 문제 08. 올바른 괄호

import java.util.*;

class Solution {
    boolean solution(String s) {

       Stack<Character> stack = new Stack<>();
       
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(') {
                stack.push(')');
            } else {
                if (stack.isEmpty())
                    return false;
                else
                    stack.pop();
            }
        }
        return stack.isEmpty();
    }
}

 

 

 

 

출처

https://goldenrabbit.co.kr/product/javapass/

 

[되기] 코딩 테스트 합격자 되기(자바 편) - 골든래빗

신입 사원 코딩 테스트를 준비하고 계신가요? 코딩 테스트는 문제만 열심히 푼다고 통과할 수 없습니다. 시험은 전략적으로 준비해야 합니다. 《코딩 테스트 합격자 되기》(자바 편)은 신입 사

goldenrabbit.co.kr

https://leejinseop.tistory.com/34

https://inpa.tistory.com/entry/JCF-%F0%9F%A7%B1-Stack-%EA%B5%AC%EC%A1%B0-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%A0%95%EB%A6%AC