Sad Puppy 3 '[프로그래머스]Java' 카테고리의 글 목록 (2 Page) :: 개발자 아지트

자바에서는 큐 구현을 위해서 ArrayDeque를 많이 사용함. 

덱은 Double Ended Queue를 줄인 말로써, 양 끝에서 삽입 삭제를 가능토록 한 큐를 구현한 것이다. 

 

package Mar0308;

import java.util.Queue;
import java.util.ArrayDeque;


public class Test {	

	public static void main(String[] args) {
		
		// ArrayDeque으로 큐 구현
		Queue<Integer> queue = new ArrayDeque<>();
		
		// 큐에 데이터 추가 
		queue.add(1);
		queue.add(2);
		
		// 큐의 맨앞 데이터 제거 후 반환
		int first = queue.poll();
		System.out.println(first); // 1
		
	}

}

 

 

덱을 큐처럼 사용하는 코드 

package Mar0308;

import java.util.ArrayDeque;


public class Test {	

	public static void main(String[] args) {
		
		ArrayDeque<Integer> q = new ArrayDeque<>();
		
		q.addLast(1);
		q.addLast(2);
		
		// 큐의 맨 앞 데이터 제거 후 반환
		int first = q.pollFirst();
		System.out.println(first);
		
		
	}

}

 

데이터를 addFirst()로만 넣고, pollLast()로만 꺼내면 덱을 통해 스택을 구현할 수 있음

 

'[프로그래머스]Java > Java입문' 카테고리의 다른 글

반복문  (0) 2024.07.05
조건문  (0) 2024.07.05
연산자  (0) 2024.07.05
자바 자료구조 구현 - 배열, ArrayList(리스트)  (0) 2024.03.08
자바 필수 문법 정리  (0) 2024.03.08

배열(배열 크기 정적 구현)

public class Test {	
	public static void main(String[] args) {
		
		int[] arr = {0, 0, 0};
		int[] arr = new int[3];
		
		// 두줄의 결과값이 동일하다. 	
        
        //관련 메소드 3가지 
        System.out.println(arr.length); // 1, ArrayList의 원소 개수를 반환하는 메소드 
		Arrays.sort(arr); // Array의 모든 데이터를 정렬
		// 정렬 대상외의 다른 인수를 추가하지 않으면 오름차순으로 정렬함, 
		// 특정 범위의 데이터만 정렬할 시, from, to 인덱스를 지정할 수 있음 
        
        // 배열의 모든 데이터를 String으로 반환하는 메서드
		System.out.println(Arrays.toString(arr)); 
        
	}
}

 

배열 사용시 시간 복잡도

*배열 데이터에 접근하기 위한 시간 복잡도는 O(1)

*배열에 데이터를 추가할 경우 

    1. 맨 뒤에 삽입할 경우 시간복잡도 : 맨 뒤에 임의 접근이 가능하고, 다른 데이터에 영향을 주지 않음, O(1)

    2. 맨 앞에 삽입할 경우 시간복잡도 : 기존 데이터들을 한칸씩 뒤로 미는 연산 필요함, 밀어야하는 데이터의 개수가 N이면,  O(N)

    3. 중간에 삽입할 경우 시간복잡도 : 삽입한 데이터 이후의 값들을 모두 한칸씩 뒤로 미는 연산 필요, 밀어야하는 데이터의 개수가 N이면,  O(N)

 

배열 사용시 고려할점 

임의 접근이 가능하여 빠르게 접근할 수 있지만, 이를 위해 충분한 메모리 공간이 필요함. 

배열의 중간이나 맨앞에 데이터 삽입이 많은지 확인해야함. 

 

ArrayList(배열 크기 동적 구현)

package Mar0308;

import java.util.ArrayList;
import java.util.Collections;

public class Test {	

	public static void main(String[] args) {
		
		ArrayList<Integer> list = new ArrayList<>();
		
		list.add(0); 
		list.add(1); // 리스트의 끝에 값 추가 
		
		
		// 다른 컬렉션을 통한 초기화 
		
		ArrayList<Integer> list2 = new ArrayList<Integer>(list);
		System.out.println(list2); //[0, 1]
		
		// 인덱스를 통한 접근
		System.out.println(list2.get(0)); // 0
		
		// 데이터 삭제
		list.remove(list.size() -1); // 마지막 데이터 삭제 
		System.out.println(list); // [0]
		
		// 관련 메소드 3가지 
		
		System.out.println(list.size()); // 1, ArrayList의 원소 개수를 반환하는 메소드 
		System.out.println(list.isEmpty()); // false, ArrayList에 저장된 데이터가 하나도 없는지 여부를 반환하는 메소드 
		Collections.sort(list); // ArrayList의 모든 데이터를 정렬
		// 정렬 대상외의 다른 인수를 추가하지 않으면 오름차순으로 정렬함, 
		// 특정 범위의 데이터만 정렬할 시, from, to 인덱스를 지정할 수 있음 
		System.out.println(list); 
		
	}

}

 

 

'[프로그래머스]Java > Java입문' 카테고리의 다른 글

반복문  (0) 2024.07.05
조건문  (0) 2024.07.05
연산자  (0) 2024.07.05
자바 자료구조 구현 - 큐, ArrayDeque  (0) 2024.03.08
자바 필수 문법 정리  (0) 2024.03.08

 

레퍼런스 타입은 참조형 변수이므로 프리미타입 보다 연산 속도가 느림 

따라서 프리미티브 타입을 주로 사용하는 것을 권장함

 

레퍼런스 타입이란 Integer, Long,Float, Double을 말하고

프리미티브 타입은 int, long, float, double을 말함

 

그러나 레퍼런스 타입에 대해서는 컬렉션 프레임워크 사용시, Integer, Float 타입을 저장할 때 사용하므로 알고는 있어야함. 
*컬렉션 프레임워크: 데이터를 저장하는 자료구조와 알고리즘을 구조화 하여 클래스로 구현해놓은 것을 말함

 

컬렉션 프레임워크

컬렉션 프레임워크는 다양한 자료구조를 직접 구현하지 않고 사용하게 해준다. 

주로 리스트(ArrayList), 스택(Stack), 큐(Queue), 데크(ArrayDeque), 해시맵(HashMap) 등을 사용한다. 

 

배열

import java.util.Arrays;

public class Test {

	public static void main(String[] args) {
		
		int[] array = { 2, 2, 2, 5 };
		
		// 배열을 출력할 때, java.util.Arrays의 toString()을 사용하면 쉽다.
        System.out.println(Arrays.toString(array)); // [2, 2, 2, 5]
		
		
	}

}

 

 

리스트

package Mar0308;

import java.util.ArrayList;

public class Test {	
	public static void main(String[] args) {
    
		// 리스트 객체 생성
		ArrayList<Integer> list = new ArrayList<>();
		
		list.add(1);
		list.add(2);
		
		System.out.println(list.get(1)); // 2
		System.out.println(list); // [1, 2]
		
	}
}

 

해시맵

해시맵은 키와 값 쌍을 저장하는 해시 테이블로 구현되어 있음

 

package Mar0308;

import java.util.HashMap;

public class Test {	
	public static void main(String[] args) {
		
		// 키는 문자열, 값은 정수형을 저장하는 해시맵 선언
		HashMap<String, Integer> map = new HashMap<>();
		
		// 해시맵 값 삽입
		map.put("vanilla cream cold brew", 1);
		map.put("ice americano", 2);
		map.put("ice vanilla latte", 3);
		
		// 해시맵 값 출력
		System.out.println(map); // {vanila cream cold brew=1, ice americano=2, ice vanila latte=3}
		
		
		
		// 해시맵에서 데이터 검색
		String key = "ice americano";
		
		if(map.containsKey(key)) {
			int value = map.get(key);
			System.out.println("key: " + key +  " value: " + value);
		}else {
			System.out.println("can't find");
		}
	
		
		// 해시맵 수정
		
		map.put("ice americano", 100);
		System.out.println(map); // {vanila cream cold brew=1, ice americano=100, ice vanila latte=3}
		
		// 해시맵 삭제
		
		map.remove("ice vanilla latte");
		System.out.println(map); // {vanila cream cold brew=1, ice americano=100}
		
		
	}

}

 

문자열

문자열은 문자들이 배열의 형태로 구성되어 있는 것이고, 이뮤터블 객체(변경할 수 없는 객체)이다. 

시간 복잡도 관점에서 사용시 주의 해야 한다. String의 값을 변경하는 연산이 많을 때는, StringBuilder 클래스나 StringBuffer클래스를 사용하는 것이 효율적이다.  

 

package Mar0308;

public class Test {	
	public static void main(String[] args) {
		
		// 문자열은 큰따옴표를 사용하여 표현한다. 
		String strr = "hi";
		
		// 문자열 추가 및 삭제 
		// 이때, 문자열은 이뮤터블 객체이므로 기존 객체를 수정하지 않고 새로운 객체를 생성하여 반환한다. 
		
		strr += "!!";
		
		// 반환시 기존 객체는 버리고 새로 생성한 객체만 사용함. 
		
		System.out.println(strr); // "hi!!"
		
		// 문자열 수정
		
		// replace(a, b) 
		// a에는 찾을 문자열, b에는 변경할 문자열 넣어 사용
		
		strr = strr.replace("i", "ello"); // "i" 를 모두 삭제함
		System.out.println(strr); // "hello!!"
		
	}
}

 

 

메서드

람다식

다른 말로 익명 함수라고도 한다. 코드에서 딱 한번 실행할 목적으로 사용하거나 함수 자체를 다른 함수의 인수로 전달할 때도 사용할 수 있다. 가독성이 좋아진다. 

 

package Mar0308;

import java.util.Arrays;
import java.util.Comparator;

public class Test {	
	
	private static class Node{
		int dest, cost;
		
		public Node(int dest, int cost) {
			this.dest = dest;
			this.cost = cost;
		}
	}
	
	public static void main(String[] args) {
		Node[] nodes = new Node[5];
		nodes[0] = new Node(1, 11);
		nodes[1] = new Node(2, 21);
		nodes[2] = new Node(3, 16);
		nodes[3] = new Node(4, 6);
		nodes[4] = new Node(5, 26);
        
        // 아래의 람다식과 일반식은 같은 역할을 수행한다...
		
		// 람다식
		Arrays.sort(nodes, (o1, o2) -> Integer.compare(o1.cost, o2.cost));
		
		// 일반식 
		Arrays.sort(nodes, new Comparator<Node>() {
			@Override
			public int compare(Node o1, Node o2) {
				return Integer.compare(o1.cost, o2.cost);
			}
		});
		
		
		System.out.println(Arrays.toString(nodes));
				
	}

}

 

 

 

'[프로그래머스]Java > Java입문' 카테고리의 다른 글

반복문  (0) 2024.07.05
조건문  (0) 2024.07.05
연산자  (0) 2024.07.05
자바 자료구조 구현 - 큐, ArrayDeque  (0) 2024.03.08
자바 자료구조 구현 - 배열, ArrayList(리스트)  (0) 2024.03.08

+ Recent posts