본문 바로가기

자바144

20230626 [Java] 문제풀이 20230626 [Java] 문제풀이 [프로그래머스] 한 번만 등장한 문자 문자열이 주어진다 문자열 안에, 단어가 한번만 나오는 단어를, 사전 순으로 정렬해서 출력을 한다 ASCII 코드를 사용하여, 단어들을 숫자로 바꾸고 Collections.sort(); 를 이용해서 정렬을 하고 단어로 바꿔준다 import java.util.*; class Solution { public String solution(String s) { String answer = ""; ArrayList sortList = new ArrayList(); int tempVal; HashMap hashMap = new HashMap(); // 단어의 개수를 해쉬에 넣는다 for (int i = 0; i < s.length(); i++.. 2023. 6. 26.
[Java] 자료구조 - 그래프 [Java] 자료구조 - 그래프 그래프란? 정점 (Vertex, Node)와 간선 (Edge)로 이루어져 있다 트리, 이진트리도 그래프의 한 종류인다 그래프는 무방향 그래프와, 방향 그래프가 있다 무방향 그래프는 정점과 정점 사이에 방향이 없는 그래프이다 (즉 모든 정점들은 서로 왕복을 할 수 있다) 방향 그래프 같은 경우 정점에서 어느 정점으로 갈 수 있는 방향이 정해져 있다 (방향이 정해져 있으면, 그 방향 밖에 갈 수 없다) 정점 (Vertex) : 노드(Node)라고도 하고, 값 또는 데이터를 저장한다 간선 (Edge) : 정점을 연결하는 선이다 분지수 (차수, degree) : 무방향 그래프에서 하나의 정점과 연결되어 있는 간선의 수 내향 분지수 (진출 차수, in-degree) : 방향 그래프.. 2023. 6. 26.
20230625 Java 문제풀이 20230625 Java 문제풀이 전국 대회 선발 고사 학생 3명을 선발하는 문제이다 문제에서는 학생들의 등수가 담긴 배열과, 학생들의 참여 여부가 담긴 배열이 주어진다 두 개의 배열을 탐색하며, 선발 고사를 참여하는 학생들 중, 높은 등수를 가진 학생들을 고른다 높은 등수부터 10000 * (제일 높은 등수) + 100 * (2번째 높은 등수) + (3번째 높은 등수) 의 식을 구하는 것이다 import java.util.*; class Solution { public int solution(int[] rank, boolean[] attendance) { ArrayList list = new ArrayList (); // number는 등수를 말하는 것 // 즉 등수는 1씩 증가할 것이고, 참가하는 학.. 2023. 6. 25.
[TIL] Java (진수 변환) [TIL] Java (진수 변환) 10진수 => 16진수 or 8진수 or 2진수 변환 Integer.toBinaryString(십진수) 10진수에서 2진수로 변환 Integer.toOctalString(십진수) 10진수에서 8진수로 변환 Integer.toHexString(십진수) 10진수에서 16진수로 변환 public class Main { public static void main(String[] args) { int number = 77; System.out.println(Integer.toBinaryString(number)); // output : 1001101 System.out.println(Integer.toOctalString(number)); // output : 115 System.. 2023. 6. 24.
[TIL] Java (Split, Join) [TIL] Java (Split, Join) split 은 문자열을 배열로 바꿔준다 .split(String regex) 해당 문자열 (regex) 을 바탕으로 문자열을 잘라서 배열에 넣어준다 .split(String regex, int limit) 해당 문자열 (regex) 을 바탕으로 문자열을 잘라서 배열에 넣어주지만, limit만큼 잘라준다 "|" 을 사용하여, 여러 구분자를 사용할 수 있다 이미 ^, * 같은 연산자를 구분자로 사용하고 싶을 때에는 \\^ 또는 \\* 처럼 앞에 \\을 추가해주면 된다 import java.util.*; public class Main { public static void main(String[] args) { String string = "JeJoon,Alex,M.. 2023. 6. 23.
[Java] 자료구조 - 트리, 이진 트리 [Java] 자료구조 - 트리, 이진 트리 트리는 노드와 간선 (링크)로 만들어진 자료구조다 트리는 사이클이 없고, 계층적 구조를 나타낼 때 사용된다 트리는 모든 노드들이 연결이 되어 있어야 한다 만약 끊기게 된다면 새로운 트리가 만들어지는 것이다 노드가 N개 이면 간선의 갯수는 N-1이다 트리 용어 노드 (Node) : 트리 안의 데이터 또는 값 에지 (Edge) : 노드를 연결하는 링크 루트 노드 (Root) : 트리의 제일 상단에 위치한 하나 밖에 없는 노드 (루트 노드는 부모 노드가 없다) Leaf 노드 : 트리의 제일 하단에 위치한 노드 (자식 노드가 없다) 부모 노드 : A 는 B와 C의 부모 노드다. 연결된 노드의 상위 노드 자식 노드 : B와 C는 A의 자식 노드다. 연결된 노드의 하위 노.. 2023. 6. 22.
[Java] 자료구조 - 힙 [Java] 자료구조 - 힙 힙은 최소힙이 있고, 최대힙이 있다 최소힙은 부모 노드가 항상 자식 노드보다 작은 숫자가 들어간다 즉 최소힙에서는 제일 앞에 있는 숫자, 또는 루트 노드가 제일 작은 숫자로 이루어져 있다 최대힙은 부모 노드가 항상 자식 노드보다 크기가 크다 즉 최대힙에서는 제일 앞에 있는 숫자, 또는 루트 노드가 제일 큰 숫자로 이루어져 있다 힙은 이진 트리로 만들어져 있다 n의 자식 노드를 구할 때에는 (인덱스가 0으로 시작할 때) / 인덱스가 1로 시작할 때에는 왼쪽 노드는 2n + 1 | 2n 오른쪽 노드는 2n + 2 | 2n + 1 부모 노드를 구할 때에는 (인덱스가 0으로 시작할 때) / 인덱스가 1로 시작할 때 (n - 1) / 2 | n / 2 값을 추가하기 (MaxHeap) .. 2023. 6. 18.
[Java] 연결리스트 [Java] 연결리스트 연결리스트 (Linked List) 각 노드에 데이터와, 포인터가 있고, 노드끼리 연결되어 있는 것을 연결리스트라고 한다 여기서 포인터는, 이전 노드 또는 다음 노드와의 연결을 담당한다 제일 처음에 있는 노드를 Head라고 한다 제일 마지막 노드의 포인터는 NULL과 연결이 되어 있다 데이터 추가/삭제는 비교적 쉽게 실행되지만, 인덱스가 없다는 점에서, 데이터를 찾으려면 Head부분부터 순회를 해야 한다 (탐색 속도 저하) 연결 리스트 종류 단일 연결 리스트 (Single Linked List) 노드에 다음 노드가 참조된 제일 간단한 형태의 연결 리스트다 일반적으로 큐를 구현할 때에 사용이 된다 Head가 제일 중요하여, Head를 잃어버린다면, 데이터 전체를 사용을 못 한다 이중.. 2023. 6. 16.
[Java] 해시 테이블 [Java] 해시 테이블 해시 테이블 key와 value를 저장하는 자료구조다 (순서는 중요하지 않다) key와 value를 묶어서 저장한다 Key 값에 Hash Function을 적용하여 배열의 고유한 index를 생성하고, 그 index를 통해 값을 저장 또는 검색을 한다 저장 되는 공간을 bucket이라고도 부른다 해시 충돌 위에서 Key 1을 함수를 통해 나온 값과 Key 2를 해시 함수를 통해 나온 값이 동일하게 나온다면 충돌이 일어난다 개방 주소법과 분리 연결법으로 이러한 충돌을 해결하려고 한다 개방 주소법 hash와 value가 1대1 관계를 유지한다 만약에 충돌이 일어났을 경우, 다른 빈 공간의 hash를 찾고, 저장을 한다 선형 탐사법, 제곱 탐사법, 이중 해싱 등이 개방 주소법으로 분류.. 2023. 6. 15.