반응형

프로그래밍 언어 27

[자바/java] 효율적인 배열 복사 System.arrayCopy

대량의 배열 데이터를 처리해야 하는 문제를 풀다 알게 된 방법이다. 두고두고 사용할 일이 있을 것 같아서 정리하게 되었다. 흔히 배열에서 리스트로, 2차원 배열에서 1차원 배열로 구조를 변경할 때 반복문을 사용해서 복사하게 된다. 이는 데이터를 삽입하기 위한 불필요한 작업이 반복적으로 발생하여 매우 비효율적인 방법이다. 예를 들어, 1 2 3 4 5 6 7 8 9 10 int[] a = new int[5]; int[] b = new int[5]; for(int i = 0; i

[자바/java] 이차원 배열 90도 회전시키기, int[][] rotate

코딩테스트 문제를 풀며 기록하고 두고두고 보면 좋을 것 같아 업로드합니다. 1. 값이 들어있는 2차원 배열을 getRotate() 파라미터로 입력한다. 2. 회전될 2차원 배열을 같은 크기로 선언해준다. 3. 크기 별로 90도 회전시켜준다. 회전이므로 높이와 넓이가 같은 정사각형 모양을 전제조건으로 한다. 1 2 3 4 5 6 7 8 9 10 public int[][] getRotate(int[][] arr) { int[][] resultArr = new int[arr.length][arr.length]; for (int i = 0; i

[자바/java] 이차원 배열 클론, Clone(), Object.Clone()

이차원 배열을 clone시키다 발생한 에러 해결방법을 공유하고자 글을 씁니다. Clone ? clone()은 Object클래스에 정의돼있다. 생성된 객체와 같은 값을 가진 복사본의 인스턴스를 생성하는 일을 한다. 개인적으로는 원래의 객체 값을 다시 사용하고 싶거나 일시적인 연산을 위해 사용한 적이 있다 clone()를 객체를 사용하기 위해서는 해당 객체에 Cloneable이라고 하는 인터페이스 구현체를 implements 해줘야 한다. 기본형에 대해서는 값 복사가 이뤄지지만, 사용자 클래스의 객체맴버에 대한 완전한 값 복사는 지원하지 않는다. 얕은 복사라고도 하는데, 주소복사가 이뤄지기 때문에 복사본의 객체에 참조형 맴버변수가 존재한다면, 원본 객체에도 영향을 미친다. 실제로 이를 코드 구현 중 맞닥뜨렸..

[자바/java] 우선순위 큐 정렬하기 priorityQueue sort

Heap 구조에 대해서는 tosuccess.tistory.com/31?category=853902 를 참고해주세요! 우선순위 큐는 힙(Heap)구조를 가지며, 정렬 기준에 따라 가장 큰 값이 먼저 나오는 MaxHeap을 만들 수 있고, 가장 작은 값이 나오는 MinHeap을 만들 수 있다. 이번에는 우선순위 큐를 정렬하는 방법에 대해 다뤄보겠다.! 1. 우선순위 큐 사용하기 1 2 3 4 5 6 7 8 9 10 11 12 13 public static void main(String[] args) { PriorityQueue priorityQueue = new PriorityQueue(); priorityQueue.add(4); priorityQueue.add(6); priorityQueue.add(5);..

[자바/java] Map, HashMap - key, value 값 가져오기(feat. Set, Iterator)

HashMap을 정리한 내용은 tosuccess.tistory.com/138 여기를 참고하세요! HashMap 데이터를 다루기 좋은 연산 방법을 몇가지 정리했습니다. 12345678910111213141516171819202122232425262728293031323334353637383940414243 public static void main(String[] args) { HashMap hm = new HashMap(); hm.put("안녕", "하세요"); hm.put("식사", "하셨나요?"); hm.put("안녕히", "계세요"); //keySet을 이용한 방법 Iterator iter = hm.keySet().iterator(); while(iter.hasNext()) { String key ..

[자바/java] Set, HashSet 사용법 데이터 삽입, 삭제, 출력

Set이란? 자바 컬렉션에 HashSet은 Set 인터페이스의 구현 클래스다. Set은 한국말로는 "집합"이고, 따로 저장 순서를 유지하지는 않는다. 또한 중복 값을 허용하지 않는다는 특징을 갖고 있다. *순서를 유지하고 싶으면 LinkedHashSet 클래스를 사용하면 된다. 1. 객체 선언 - new HashSet(); 1 Set set = new HashSet(); cs 2. 데이터 삽입 - set.add() 1 2 3 4 5 6 Set set = new HashSet(); set.add("apple"); set.add("banana"); set.add("pyopyo"); set.add("kiwi"); cs 3. 데이터 삭제 - set.remove(object e); 1 2 3 4 5 6 7 8 S..

[자바/java] 순서대로 저장, 출력하는 HashMap - LinkedHashMap 사용하기

HashMap ? HashMap은 Map 인터페이스를 구현한 Map 컬렉션이다. 인터페이스를 상속하기 때문에 Map의 특성을 그대로 사용할 수 있다. Key-Value쌍의 데이터로 저장되는 구조를 갖고 있고 이 데이터는 모두 객체이다. 값은 중복될 수 있지만 key값은 고유한 값을 가져야 한다. 만약 이미 존재하는 key값과 동일한 key값을 put하게 되면 새로운 key값으로 교체된다. 우리는 자주 HashMap을 사용한다. key-value 쌍의 데이터를 표현하기 위해서이기도 하고, 자연스럽게 중복을 원하지 않는 key-value 알고리즘을 사용해야 할 때 주로 사용한다. LinkedHashMap ? HashMap은 위와 같은 특징을 갖고 있다. 하지만 한 가지 더 추가하자면 아래 사진과 같이 데이터..

[파이썬/python] 리스트 기능 간편정리

1. index로 리스트 내 특정요소 위치 찾기 1 2 3 4 listT = ['A', 'B', 'C', 'D', 'E'] listT.index('B') # 1 cs 2. insert로 리스트 내 특정 위치에 특정 값 넣기 1 2 3 listT.insert(6, 'F') # ['A', 'B', 'C', 'D', 'E', 'F'] cs 3. extend로 리스트 확장 1 2 3 4 listV = [2,2,2] listT.extend(listV) # ['A', 'B', 'C', 'D', 'E', 'F', 2, 2, 2] cs 4. 문자열 리스트로 만들기 1 2 3 char = list('helloworld') # ['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd'] cs..

[파이썬/python] 리스트 일정 단위로 자르기

리스트 일정 단위로 자르기 1 2 3 4 5 a = "ABCDEFGHIJKLMN" unit = 4 b = [a[i : i + unit] for i in range(0,len(a),unit)] # ['ABCD', 'EFGH', 'IJKL', 'MN'] cs - 리스트안에 for문을 포함하는 리스트 내포를 이용하여 a를 4(unit) 단위로 잘라서 하나의 리스트로 만들어준다. - 나머지를 버리지 않고 남은 요소들은 마지막 자리에 위치한다.

반응형