전체 글 38

DNS(Domain Name Syetem)

DNS(Domain Name Syetem)웹사이트에 접속 할 때 우리는 외우기 어려운 IP 주소 대신 도메인 이름을 사용합니다.도메인 이름을 사용했을 때 입력한 도메인을 실제 네트워크상에서 사용하는 IP 주소로 바꾸고 해당 IP 주소로 접속하는 과정이 필요합니다. DNS 구성 요소도메인 네임 스페이스(Domain Name Space)네임 서버(Name Server) = 권한 있는 DNS 서버리졸버(Resolver) = 권한 없는 DNS 서버도메인 네임 스페이스(Domain Name Space)DNS는 전세계적인 거대한 분산 시스템입니다.도메인 네임 스페이스는 이러한 DNS가 저장 관리하는 계층적 구조를 의미합니다.도메인 네임 스페이스는 최상위에 루트 DNS 서버가 존재하고 그 하위로 연결된 모든 노드가 ..

네트워크 2025.03.03

TCP/IP 4계층

TCP/IP 4계층Network Layer (OSI 7계층에서 물리+데이터링크 계층)알맞은 하드웨어로 데이터가 전달되도록 MAC주소를 핸들링 하는것 뿐 아니라, 데이터 패킷을 전기신호로 변환하여 선로를 통하여 전달할 수 있게 준비 해줍니다.물리적인 주소로 MAC을 사용합니다.Internet Layer (OSI 7계층에서 네트워크 계층)통신 노드 간의 IP패킷을 전송하는 기능과 라우팅 기능을 담당합니다.IP를 사용하여 데이터의 원천지(origin)과 목적지(destination)에 관한 정보를 첨부합니다.IP는 복잡한 네트워크 망을 통하여 가장 효율적은 방법으로 데이터의 작은 조각들을 되도록 빨리 보내는 일을 합니다.IP는 패킷 전달 여부를 보증하지 않고, 경로를 설정하여 어떻게든 빨리 보내도록 합니다.프..

네트워크 2025.03.01

OSI 7계층

OSI 7계층OSI 7계층은 네트워크 통신이 일어나는 과정을 7단계로 나눈 것을 의미합니다. OSI를 7계층으로 나눈 이유는 네트워크 통신의 흐름을 한 눈에 알아보기가 쉬우며, 통신의 이상이 생기면 어느 계층에 문제가 있는지 확인할 수 있고 대처도 유연하게 할 수 있기 때문입니다. OSI 7계층 종류물리 계층(Physical layer)이 계층에서는 단지 데이터를 전달만 할뿐 전송하려는(또는 받으려는)데이터가 무엇인지, 어떤 에러가 있는지 등에는 전혀 신경 쓰지 않습니다.주로 전기적, 기계적, 기능적인 특성을 이용해서 통신 케이블로 데이터를 전송하는 물리적인 장비입니다.장비 : 통신 케이블, 리피터, 허브 등데이터 링크 계층(Data link layer)물리계층을 통해 송수신되는 정보의 오류와 흐름을 관..

네트워크 2025.02.28

Scanner, BufferedReader

알고리즘 문제를 풀이 할때 입력값을 받기 위해서 주로 Scanner와 BufferedReader를 사용했습니다. 그런데 최근에 메모리 초과가 발생했을 때 때 Scanner에서 BufferedReader로 교체를 하니 메모리 문제가 해결된 경험이 있습니다. 이를 계기로 Scanner와 BufferedReader에 대해 정리를 해보겠습니다.ScannerScanner 클래스는 입력받은 데이터(바이트)를 다양한 타입으로 변환하여 반환하는 클래스입니다. 간단하게 기본형과 String 타입을 정규표현식을 사용해 파싱할 수 있습니다.java.util 패키지에 속합니다. (java.util.Scanner)공백(띄어쓰기) 및 개행(줄 바꿈)을 기준으로 읽는다.(' ', '\t', '\r', '\n' 등) 원하는 타입으로..

[백준/Java] 11403 : 경로 찾기

https://www.acmicpc.net/problem/11403  문제에서 요구하는 바는 시작점으로 부터 갈 수 있는 목적지를 2차원 배열을 통해 표현하는 것 입니다. 여기서 중요한 점은 자기 자신으로 돌아올 수 있는지 체크하는 것도 중요합니다. 인접리스트를 통해 그래프를 구현하였으며, 모든 정점을 시작점에 놓아 갈 수 있는 지점을 배열에 체크 한 후에 값을 저장하면 쉽게 풀 수 있습니다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;import j..

알고리즘 2025.02.20

[백준/Java] 23326 : 홍익 투어리스트

https://www.acmicpc.net/problem/23326 이 문제에서 원하는 것은 현재 도현이의 위치로부터 가장 가까운 명소를 찾는 것인데, 무조건 시계 방향으로만 돌아야만 합니다. 그래서 명소를 관리하기 위해 TreeSet 자료구조를 사용하였습니다. 그 이유로는 TreeSet에서는 X보다 큰 값 중에 가장 작은 값을 반환해주는 함수를 제공해주기 때문입니다. 1. 1의 경우에는 TreeSet에 저장되어 있으면 삭제하고, 저장되어 있지 않으면 추가를 합니다. 2.  2의 경우에는 도현이의 위치를 옮겨주어야 하는데 아무리 큰 수가 오더라고 결국 한 바퀴를 돌게 되면 제자리이기 때문에 나머지를 계산해 최종적으로 움직여야 하는 칸을 계산하고 크기를 넘을 경우 N으로 나누어 주면 됩니다. 3.  3의 ..

알고리즘 2025.02.20

[백준/Java] 21939 : 문제 추천 시스템 Version 1

https://www.acmicpc.net/problem/21939  처음에 문제를 접했을 때 난이도 순으로 정렬을 하고 난이도가 같으면 문제 번호로 정렬을 하면 손쉽게 전체를 정렬할 수 있다고 생각하였습니다. 그래서 하나의 클래스를 만들고 이를 TreeSet을 통해 정렬을 했습니다. 그런데 solved 명령어를 해결하기 위해서는 문제 번호에 해당하는 TreeSet에 저장된 값을 알아야만 삭제를 O(Log N)에 할 수 있기 때문에 이를 관리하는 HashMap을 생성하였습니다. HashMap에 키로 문제 번호를 받고 값으로 TreeSet에 저장된 값을 저장하는 방식으로 풀이를 하였습니다. import java.io.BufferedReader;import java.io.IOException;import j..

알고리즘 2025.02.20

[백준/Java] 15681 : 트리와 쿼리

https://www.acmicpc.net/problem/15681  이번 문제는 하나의 트리에서 서브트리의 루트를 정했을 때 그 트리에 포함된 정점을 출력하는 문제입니다. 기본적인 트리 문제에 조금 더 생각을 하면 될 것 같습니다. 매번 서브 트리 루트가 정해질 때 마다 계산을 하기에는 정점의 수가 최대 500,000 쿼리의 수가 500,000 이고 트리 전체는 변하지 않기 때문에 dp를 통해 미리 계산을 하는 식으로 해결을 하였습니다. import java.io.*;import java.util.*;public class Backjoon_15681_트리와_쿼리 { public static void main(String[] args) throws IOException { Buffere..

알고리즘 2025.02.19

[백준/Java] 2623 : 음악프로그램

https://www.acmicpc.net/problem/2623  이번 알고리즘은 위상정렬입니다. 위상 정렬은 그래프에서 방향을 가지는 간선으로 이루어져 있으며 사이클이 없는 것을 말합니다.간단하게 설명을 하자면 A를 하기 위해서 B를 우선 해야 한다는 가정이 있다면 A, B와의 관계를 B -> A로 나타낼 수 있습니다. 문제에서는 위의 개념만 적용하면 바로 풀이를 할 수 있습니다. 서로의 관계를 M번 만큼 제시하는 것 말고는 크게 신경 써야 하는 부분은 없습니다. 우선 시 하는 것이 없는 것을 먼저 큐로 넣고 큐에서 나오면서 자신을 필요로 하는 정점을 가져오고 이 정점의 우선 시 하는 갯수에 -1을 하면 됩니다. 여기서 0이 되면 우선 시 하는 정점을 모두 진행했기 때문에 큐에 넣어주는 방식으로 해결..

알고리즘 2025.02.19

[백준/Java] 21276 : 계보 복원가 호석

https://www.acmicpc.net/problem/21276 해당 문제에서는 제일 먼저 가문의 개수와 가문의 시조를 구해야 합니다. 가문의 개수를 구하는 방법은 자신을 바라보는 정점이 없는 정점 즉 루트가 몇 개인지 확인하고 그 값을 출력을 하면 됩니다. 그래서 가문의 시조를 관리하는 리스트를 만들어 이를 해결하여습니다. 위 말을 조금 더 쉽게 생각하면 부모가 있어야 자식이 있기 때문에 부모 -> 자식 관계로 생각을 하면 합니다. 즉 최상위 조상은 누구도 자신을 바라보지 않습니다. 그리고 자식들을 출력을 해야하는데 이 또한 리스트를 활용하여 각 정점마다 자식을 추가 해주었습니다.for(int i = 0 ; i q = new LinkedList(); int idx = map2.get(strArr[..

알고리즘 2025.02.19