🎀 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)
- 배열을 선택할 때 고려할 점
데이터에 자주 접근하거나 읽어야 하는 경우 좋은 성능을 낼 수 있습니다.
- 할당할 수 있는 메모리 크기를 확인해야 합니다.
- 중간에 데이터 삽입이 많은지 확인해야 합니다.
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(스택) 동작을 제공하고 있다.

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
'스터디 > 묘공단 자바 코딩테스트' 카테고리의 다른 글
| [프로그래머스/Java] 9일차 코테 문풀 - Lv. 1 기사단원의 무기 (0) | 2024.04.24 |
|---|---|
| [프로그래머스/Java] 8일차 코테 문풀 - Lv. 1 성격 유형 검사하기 (0) | 2024.04.23 |
| [프로그래머스/Java] 6일차 코테 문풀 - Lv. 1 과일 장수 (0) | 2024.04.21 |
| [프로그래머스/Java] 5일차 코테 문풀 - Lv. 1 카드 뭉치 (0) | 2024.04.20 |
| [프로그래머스/Java] 4일차 코테 문풀 - Lv. 1 추억 점수 (0) | 2024.04.19 |