JAVA| 그래프 표현 방식 2가지 | ArrayList<Integer> 의 사용
그래프의 표현 방식 2가지 1) ArrayList 타입의 1차원 배열[] static ArrayList A []; //main에서 사용 시 A = new ArrayList[n+1]; for(int i=1; i
- 코딩 테스트 [준비]/JAVA | 활용할 문법 정리
- · 2023. 6. 9.
728x90
🎈 ArrayList에 remove() 처리 시 주의할 점 | IndexOutOfBoundsException IndexOutOfBoundsException 예외가 계속해서 발생했다. 이는 ArrayList의 remove() 메소드 정의가 2개 있기 때문이다. 내가 호출하려고 헀던 메소드의 시그니처는 두 번째인데, int 형으로 remove()를 시도하니 첫 번째 메소드 시그니처를 호출했기 때문에 발생한 Exception이었다. 1) int remove(int idx) // 지울 값의 인덱스 인자로 해당 값 지우고 지운 값을 int형으로 리턴 → 이 메소드가 호출되면서 접근한 idx 범위가 실제 list 범위 넘어서서 Exception 터짐 2) boolean remove(Object obj) // 지울 ..
JAVA | 객체 비교하기 - equals()와 hashCode() 재정의 💡 객체는 매번 생성할 때 다른 해시코드를 갖고 다른 주소값을 갖는 다른 객체로 분류된다. 그런데 만약 객체의 필드가 같을 때 동일한 객체로 처리하고 싶으면 어떻게 해야 할까 ? equals 와 hashCode()를 해당 클래스에서 재정의해서 사용하면 된다! 우리가 자바에서 흔히 사용하는 HashMap, HashSet 등의 자료구조는 내부적으로 객체를 비교할 때 해당 객체의 해쉬값을 사용하여 비교를 하기 때문에 이번 기회에 잘 알아두고 써먹자. ◼️ equals 메소드 재정의 하는 법 아래의 코드와 같이, 우선 비교하고자 하는 클래스 타입인지를 instanceof로 확인한다. 나의 경우에는 두 객체가 갖는 x, y값이 각각 같다면..
JAVA | HashMap에서 ConcurrentModificationException 발생 HashMap 을 선언해서, 각 닉네임 별로 중복 개수 카운팅 해둔 뒤, for(String key : map.keySet()) {}으로 내부에서 if(map.get(key)==1) 인 경우, 현재 map에서 해당 key를 Remove() 처리 하는 과정에서 발생한 오류이다. 이유는 ‘동시 수정 에러’ 이다. 즉, 기존 map에 존재하는 상태로 remove 하면서 계속 for문을 돌려니, 서로 다른 Thread가 같은 HashMap에 대한 연산을 수행하면서 충돌한 오류인 것이다. ⬛ 해결 1. 아예 keyMap의 key만 복제한 String[] 배열을 따로 만들기. 이렇게 하면, 접근하는 keyArr와 삭제 대상..
⬛ Deque | Double-ended-queue (덱/데크) 데크 : 큐 양쪽 끝에서 삽입/삭제 모두 수행 가능하도록 확장한 자료구조 ⚫ Deque 사용법 1) Deque 생성 Deque dq = new LinkedList(); 2) Deque 값 추가 Deque dq = new LinkedList(); //1) 앞쪽에 데이터 삽입 dq.addFirst(); dq.offerFirst(); dq.push(); //2) 뒤쪽에 데이터 삽입 dq.addLast(); dq.offerLast(); dq.add(); 3) Deque 값 제거 //1) 앞쪽 값 제거 dq.removeFirst(); dq.remove(); dq.poll(); dq.pollFirst(); //2) 뒷쪽 값 제거 dq.removeLas..
🟦 JAVA | 구분자 여러개일 때, 정규식으로 뽑는 방식 1) split()에 정규 표현식으로 구분자 여러개 담아서 자르기 주의할 점 : 온점(.) , (+)은 정규식에서 특별한 의미를 지니기 때문에, 단순한 문자로 인식시키기 위해서는 \\를 앞에 붙여야 한다. String str = "a.b,c+d"; String[] tmp = str.split("\\\\.|,|\\\\+"); \\\\는 단순 문자열로 인식하라고 붙였고, | 는 or의 의미이다. 여기서 . 또는 , 또는 + 모두 구분자로 인식하겠다 의미. str.split("@|#|%"); 정규식에서 '|' 기호는 or 연산을 수행합니다. '@' 또는 '#' 또는 '%' 기호를 구분자로 하여 문자열을 잘라줍니다. 2) StringTokenizer 클..
🟦 JAVA | 알파벳, 대/소문자 확인하는 방법 | isUpperCase(), isLowerCase(), isAlphabetic() 코테 당시 기억이 안나서 (int)형으로 아스키 코드 확인 후 뽑았다. 물론. 1) 소문자 알파벳 (97~122) 2) 대문자 알파벳 (65 ~90) 이지만, 더 쉽게 풀 수 있는 방식이 있으면 그렇게 풀어야지. 1) Character 형 | isUpperCase(), isLowerCase() 2) String 형 | 문자열 → char[] 로 변형 후, isUpperCase(), isLowerCase() 호출 public static void main(String[] args) { // TODO Auto-generated method stub //이 문자가 영어 알파벳 ..
🟦 JAVA | 사용자 정의 객체 정렬 - String 타입의 사전 순 정렬 compareTo() 메소드 사용법 | String 형 정렬 compareTo를 사용한 문자열 비교 compareTo는 두 문자열이 단순히 같은지 아닌지를 알려줄 뿐만 아니라 어떤것이 사전적인 순서로 더 앞,뒤에 존재하는지를 알려준다. String 문자열 간 사전순 정렬 //사전순 정렬할 땐, 결과값 음수일 때-> 음수리턴. 양수일 때->양수 리턴 //역순 정렬 하고 싶으면 음수일 때 ->양수를 리턴, 양수일 때 -> 음수를 리턴 class Market implements Comparable{ String name; String phoneNum; String address; @Override public int compareTo..
⬛ 사용자 정의 객체 정렬 | Comparable 💡 (1) Comparable을 이용하여 Java 객체를 정렬할 수 있다. 💡 (2) Comparator을 이용하여 Java 객체를 정렬할 수 있다. ⬛ 객체 정렬 객체를 사용자가 정의한 정렬 기준에 맞춰 정렬해야 하는 경우 Ex) 좌표를 x좌표가 증가하는 순, x좌표가 같으면 y좌표가 감소하는 순으로 정렬 Ex) 국어점수는 증가하는 순, 수학점수는 감소하는 순으로 정렬 ⬛ Comparable 인터페이스 사용 기본적으로 적용될 정렬 기준이 되는 메소드 정의하는 인터페이스 정렬할 객체에 Comparable interface를 implements 후, compareTo() 메서드를 오버라이드하여 구현한다. 🟪 compareTo() 메소드 사용법 | 기본 in..
🏓 JAVA | 배열 Arrays.sort() 기준 재정의 : Comparator 익명 클래스 구현 🟧 1) 1차원 배열 sort 재정의 //1차원 배열 내림차순 sort - compareTo 사용 Integer[] nums6 = {9,8,1,3,2}; Arrays.sort(nums6, new Comparator() { @Override public int compare(Integer o1, Integer o2) { //두 숫자 비교 return o1 - o2; //오름차순 //return o2 - o1; //내림차순 } }); 🟧 2) 2차원 배열 sort 재정의 int[][] arr = new int[][2]{{5,40},{3,50},{1,30},{4,20},{2,10}}; // 1. Comparat..
🏓 JAVA | 특수문자로 Split(), replaceAll() 사용 시 주의할 점 에러 내용 : Dangling meta character '+' near index 0 에러내용 : Dangling meta character '+' near index 0 split("+")부분에서 컴파일러가 + 부분을 인식 못함. 해결: String tmp[] = data.split("[+]")로 변경. 아니면 특수문자 앞에 \\\\쓸것. (예 data.split("\\\\+")) String연산 함수(예:replaceAll()..) 이용시 주의할것. 🟧 1) [ ] 를 씌워야 인식하는 특수 문자들 * ⇒ [*] + ⇒ [+] $ ⇒ [$] | ⇒ [|] 🟧 2) \\ 를 붙여줘야 인하는 특수 문자들 ( ⇒ \\\\..
그래프의 표현 방식 2가지 1) ArrayList 타입의 1차원 배열[] static ArrayList A []; //main에서 사용 시 A = new ArrayList[n+1]; for(int i=1; i
⬛ 내림차순 정렬 (역순 정렬) 기본적으로 int[] 기본형에 대해서는 역순 정렬 이 안된다. Integer와 같이 클래스 타입이어야 역순 정렬 가능 🏓 1) 기본형 int[] → 클래스형 Integer[] 타입으로 변형하기 Integer[] tmp = Arrays.stream(nums).boxed().toArray(Integer[]::new); 🏓 2) Arrays.sort() 함수 사용하기 (1) Collections.reverseOrder() 사용 Arrays.sort(배열, Collections.reverseOrder() ); (2) Lamda 람다 함수 사용 Arrays.sort(배열, (a, b) -> (b - a) ); //역순 정렬
⬛ Java. 제곱근의 판별과 제곱 만들기 🎈 문제 이 문제는 1) 제곱근 판별 2) 제곱 만들기 모두 가능해야 한다. 임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요. 🟧 Math 클래스의 함수 Math.sqrt(a) 함수 반환형은 double 형을 반환한다. 입력값 a의 제곱근을 소수점 포함반환 따라서 정수의 제곱근 판별 시 반환된 값을 1로 나누었을 때 나머지가 0인지 판별하면 된다. (소수점 없다는 거니까) Math.pow(a, b) 함수 a의 b 제곱 값을 반환한다.