본문 바로가기

분류 전체보기104

백준 15652 C#) N과 M (4) 이전에 풀었던 N과 M (1)과 거의 유사한 문제다. class Program { static StreamWriter sw = new(new BufferedStream(Console.OpenStandardOutput())); static int n, m; static int[] result; static void DFS(int depth, int start) { if (depth == m) { sw.WriteLine(string.Join(' ', result)); return; } for (int i = start; i 2023. 3. 8.
내 패킷은 몇 개의 라우터를 거칠까? 오늘 교수님께서 이러한 질문을 하셨다. "패킷이 미국까지 도달하려면 얼마나 많은 라우터를 거쳐야 할까?" 아무것도 모르던 나는 수백개의 라우터를 거쳐야 할 것이라 생각했는데, 예상 외로 수십개 정도만 거치면 된다는 답변을 듣고 실제로 그러한지 알아보기로 했다. tracert 명령어를 통해 미국의 at&t 서버로 가는 경로를 찾아보았다. 실제로 내 패킷이 att.com까지 도달하는 데에는 22홉밖에 걸리지 않았다. 구글 dns 서버인 8.8.8.8까지도 11홉만에 도달할 수 있었다. 세상에 라우터가 얼마나 많은데 고작 열댓개로 미국까지 패킷을 보낼 수 있다니... 세상물정을 모르고 살았나보다. 참고로 tracert는 ping과 동일하게 icmp 프로토콜을 사용하므로 rtt를 구할 수 있다. 2023. 3. 8.
백준 15649 C#) N과 M (1) 백트래킹 및 DFS의 기본을 익힐 수 있는 문제. 시리즈가 굉장히 많으므로 틈틈이 하나씩 풀면 좋다. class Program { static StreamWriter sw = new(new BufferedStream(Console.OpenStandardOutput())); static int n, m; static int[] result; static bool[] visited; static void DFS(int depth) { if (depth == m) { sw.WriteLine(string.Join(' ', result)); return; } for (int i = 1; i 2023. 3. 8.
백준 1002 C#) 터렛 간단한 중~고등학교 수준의 수학 문제. 두 원의 교점 개수를 묻는 문제였다. class Program { static void Main() { StreamWriter sw = new(new BufferedStream(Console.OpenStandardOutput())); int t; int[] xyr; int x1, y1, r1; int x2, y2, r2; double dist; t = int.Parse(Console.ReadLine()); while (t-- > 0) { xyr = Array.ConvertAll(Console.ReadLine().Split(), int.Parse); (x1, y1, r1) = (xyr[0], xyr[1], xyr[2]); (x2, y2, r2) = (xyr[3], x.. 2023. 3. 7.
빅 엔디안과 리틀 엔디안을 직접 확인해보자 메모리는 바이트 단위로 주소를 할당하고 저장한다. 다만 CPU 아키텍쳐마다 바이트를 저장하는 순서가 다르고 이를 빅 엔디언과 리틀 엔디언이라는 명칭으로 구분하고 있다. 빅 엔디언은 큰 자릿수부터 저장하는 것으로, 우리가 평소 16진수를 읽는 순서와 동일하다. 그리고 리틀 엔디언은 그 반대로 이해할 수 있다. 왜 방식이 나뉘었는지를 논하자면 여러 이유가 있겠으나, 나는 간단히 빅 엔디언은 사람이 다루기 쉽고 리틀 엔디언은 머신이 다루기 쉽기 때문으로 이해하고 있다. 위 사진처럼 0x12345678을 저장하는 경우, 빅 엔디안은 읽는 순서 그대로 저장되므로 사람이 다루기가 쉽다. 그러나 리틀 엔디안은 오른쪽부터 읽어야하므로 조금 불편하게 느껴진다. 그래도 머신 입장에서는 리틀 엔디안과 같은 형태가 가산 등의.. 2023. 2. 4.
C#) 컴파일 과정 위 그림만으로도 거의 모든 설명이 가능할 듯한데, 요약하자면 1. C#은 컴파일러에 의해 Common Intermediate Language(CIL 혹은 IL, MSIL)로 컴파일된다.2. IL은 Common Language Runtime(CLR) 상의 컴파일러에 의해 네이티브 코드로 컴파일된다. 라고 정리할 수 있다.아래는 부연설명이다. 1.Common Language Infrastructure(CLI)는 마이크로소프트에서 개발한 표준이다.CLI는 다양한 요소들로 구성되어 있는데, 크게는 언어적인 요소와 시스템적인 요소로 구분할 수 있다..NET은 이러한 CLI의 가장 대표적인 구현체로서 각각의 요소를 IL과 CLR로 칭하고 있다. 2..NET을 기반으로 하는 언어들은 C#, VB, F# 등으로 매우 .. 2023. 2. 3.
공유기의 원리와 NAT 요약 1. ip는 사설(private) ip와 공인(public) ip의 두 종류로 나뉜다. 사설 ip는 말그대로 private하여 로컬에서만 사용할 수 있고, 인터넷 상에서는 사용할 수 없다. 반대로 공인 ip는 인터넷 상에서 나를 대표하는 유일한 주소이다. 2. 우리는 인터넷 공급자(KT, SKT 등)로부터 하나의 공인 ip를 부여받는다. 그러나 하나의 ip를 여러 기기들이 동시에 사용할 수는 없으므로(ip 충돌), 공유기를 활용해야 한다. 3. 공유기를 연결하면, 공인 ip는 공유기가 사용하게 된다. 그리고 그 공유기와 공유기에 연결된 기기들은 사설 ip를 부여받는다. (따라서 공유기는 사설과 공인 ip를 동시에 가진다) 사설 ip는 주로 192.168.x.x로 약속되어 있으며, 그 중에서도 공유기는 주.. 2023. 1. 12.
백준 18870 C#) 좌표 압축 요약하자면, 주어진 숫자가 몇번째로 작은지를 출력하는 문제이다. class Program { static void Main() { StreamWriter sw = new(new BufferedStream(Console.OpenStandardOutput())); //입력 int n = int.Parse(Console.ReadLine()); string[] x = Console.ReadLine().Split(); //압축된 좌표를 기존 위치에 출력하려면 기존 위치를 기억해야 하므로, //입력받은 x(num)를 기존 위치(oldIdx)와 함께 ValueTuple로 묶어 저장한다(input) (int num, int oldIdx)[] input = new (int, int)[n]; for (int i = 0; .. 2022. 12. 30.