⚠️JAVA 언어를 사용합니다. 소수 문제.. 너무 어렵다 🔒문제 1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 조건 n은 2이상 1000000이하의 자연수입니다. 🗝️정답 import java.util.Set; import java.util.HashSet; class Solution { public int solution(int n) { //1. 선언 및 초기화 Set set = new HashSet (); set.add(2); for(int i=3; i
⚠️JAVA 언어를 사용합니다. 카카오 문제인데 생각보다 괜찮아서 작성해 본다. 여기서 String.format()이라는 함수를 접해서 기록하려고 한다. 🔒문제 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다. 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 "공백"(" ") 또는 "벽"("#") 두 종류로 이루어져 있다. 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 "지도 1"과 "지도 2"라고 하자. 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지..
✅ 비선형 자료구조 : i 번째 값을 탐색한 뒤의 i+1이 정해지지 않은 구조 트리(Tree)? 계층적인 자료를 표현하는 데 이용되는 자료구조. 그래프의 한 종류이다. 예) 컴퓨터 directory 노드(Node) : 그래프의 정점 루트 노드 : 트리의 기준이 되는 노드. 나무의 뿌리를 생각하면 된다. 루트 노드에서 가지가 뻗어나가는 이미지. 부모 노드 : 자신과 인접한 노드들 중 루트 노드로 향하는 노드 자식 노드 : 자신과 인접한 노드들 중 루트 노드의 반대 방향으로 향하는 노드 단말 노드 : 자식 노드가 존재하지 않는 노드. 가지의 끝 형제 노드 : 부모 노드가 같은 노드 가지(Branch) : 그래프의 간선. 트리에서는 양방향 간선만 사용한다. 부트리(Sub Tree) : 부분 그래프와 비슷하게 ..
✅그래프 순회 알고리즘 : 하나의 정점으로부터 시작하여 차례대로 모든 정점을 한 번씩 방문하는 것 깊이 우선 탐색(Depth Sirst Search, DFS) 깊은 부분을 우선적으로 탐색하는 알고리즘 실행 과정 첫 정점을 방문한다. 인접한 정점 중 아직 방문하지 않은 정점을 방문한다. 이때 한 길로 쭉 파고 들어간다. 더 이상 들어갈 길이 없으면(인접한 모든 정점에 이미 방문했으면), 방문하지 않은 인접한 정점을 찾을 때까지 들어온 길을 돌아간다. 위 과정을 반복한다. 구현 1. 순환 호출 이용 재귀함수를 필요로 함. 공부 후 내용 추가 더보기 코드 출처 import java.io.*; import java.util.*; /* 인접 리스트를 이용한 방향성 있는 그래프 클래스 */ class Graph {..
✅ 비선형 자료구조 : i 번째 값을 탐색한 뒤의 i+1이 정해지지 않은 구조 그래프(Graph)? 정점(vertex)과 간선(edge)으로 이루어진 자료구조이다. 즉, 연결되어 있는 객체 간의 관계를 표현한다. 정점마다 간선이 있을 수도 있고 없을 수도 있다. 정점(vertex) : 위치라는 개념. node라고도 부름 간선(edge) : 위치 간의 관계. 즉, 노드를 연결하는 선. link, branch라고도 부름 인접 정점 : 간선에 의해 직접 연결된 정점 차수 : 무방향 그래프에서 하나의 정점에 인접한 정점의 수 진입 차수(내차수) : 방향 그래프에서 외부에서 오는 간선의 수 진출 차수(외차수) : 방향 그래프에서 외부로 향하는 간선의 수 경로 길이 : 경로를 구성하는 데 사용된 간선의 수 단순 경..
⚠️JAVA 언어를 사용합니다. 무려 이 문제를 2시간 반이나 잡고있었다... 이유는 문제를 잘못 해석해서🥲 🔒문제 문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다. 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다. 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다. s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다. 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다. 문자열 s가 매개변수로 주어질 때, 위 과정과..
순차 탐색(Sequential Search) 시작점부터 순차적으로 탐색하는 것 시간복잡도 10개의 데이터를 순차적으로 탐색했을 때 걸리는 평균 연산 횟수는 이고, 따라서 데이터의 크기가 n일 때 연산횟수는 이므로 전부 탐색했을 때 시간복잡도는 O(n)이다. 사진 출처 : https://earthteacher.tistory.com/43#gsc.tab=0 구현 for (int i = 0; i < list.size(); i++) { if(list.get(i) == searchItem) return i; } 간단하게 살펴보면 리스트(또는 배열)가 있을 때, 첫 데이터부터 하나씩 가져와서 찾는 데이터와 비교한다. 가져온 데이터가 찾는 데이터와 일치하면 인덱스를 반환한다. 이진 탐색(Binary Search) 정렬..
✅ 자료구조 : 데이터를 저장하는 방식 ✅ 선형 자료구조 : 한 종류의 데이터가 선처럼 길게 나열된 자료구조 랜덤 접근 불가능? 모든 자료에 O(1)으로 접근이 보장되지 않는 자료구조들 연결 리스트(Linked List) 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식의 자료구조 노드의 포인터가 이전, 다음 노드와의 연결을 담당한다. 단일 연결 리스트(Singly Linked List) 각 노드가 다음 노드에 대해서만 참조하는 가장 단순한 형태의 연결 리스트 일반적으로 큐를 구현할 때 사용된다. Head 노드를 잃어버려 참조하지 못하는 경우 데이터 전체를 사용 못하게 되는 단점이 있다 FAT 파일 시스템이 단일 연결 리스트로 파일 청크(동적 메모리로 할당되는 영역)를 연결합니다.(?) 이..
데이터 삽입 INSERT INTO 테이블에 새 레코드를 삽입할 때 사용 INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, valus2, value3, ...); 만약 모든 열에 대한 값을 추가하는 경우 열 이름은 지정할 필요가 없다. 열과 값의 순서가 같아야 한다. 데이터 조회 SELECT 데이터를 선택해서 조회할 수 있음 SELECT column1, column2, ... FROM table_name WHERE condition; column1, column2, ... : 데이터를 선택하려는 테이블의 필드 이름 모든 필드를 조회할 때 : SELECT * FROM table_name; ⭐WHERE 레코드를 필터링하는 데 사용한..