목록분류 전체보기 (265)
SW
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cXwOCy/btqB1ZZMc2p/0xk9z86Mv47L7TURMxoLrK/img.jpg)
0. 후기 2019년에 학교에서 '컴퓨터 네트워크'라는 수업을 들었고 그것을 바탕으로 네트워크 관련 자격증을 취득하고 싶었다. CBT에 올라와 있는 기출문제를 풀고 블로그에 정리하며 준비하였다. 시험은 50분간 진행되고 20분 후 부터 나올 수 있었다. 100점 만점 60점 이상이면 합격이다. 문제는 기출문제처럼 종목이 나눠져서 나오지 않고 랜덤으로 나온다. OSI 7 계층, 서브넷 마스크 관련 계산, 리눅스 명령어, 네트워크 장비 기능, 다양한 프로토콜의 기능 정도만 알아도 충분할 것 같다. 위 글에 종목별로 정리, 핵심내용 요약을 해놓았는데 '핵심내용 요약 + 기출문제' 만 해도 무난히 (98% 확률로)합격할 수 있(을것 같)다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/snAX5/btqB5hZheOe/LO9rIs2Hbkkn39MQzNuxgk/img.png)
0. 제목 백준 15953 상금 헌터 BOJ 15953 상금 헌터 C++ 15953 상금 헌터 1. 문제 https://www.acmicpc.net/problem/15953 2. 풀이 조건문으로 범위를 지정하는 방식으로 구현하는 것도 가능하다. 아래 풀이는 다른 방식이다. 처음에는 각 등수별로 지정되는 인원들을 vector에 담으려고 하였으나 풀다보니 vector가 필요없었다. 상금을 배열에 담아두고 등수와 등수에 할당 된 인원수에 대한 반복문을 이용하였다. 입력받은 등수에 해당하는 등수와 상금배열의 인덱스의 관계를 이용해 같으면 변수 firstGet, secondGet에 담았다. 합에 10000을 곱해주면 상금의 합이 구해진다. 3. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cZUoUX/btqB3qPE8Q3/8syEh8sqmgjana9EsnU2v0/img.png)
0. 제목 백준 2133 타일 채우기 BOJ 2133 타일 채우기 C++ 2133 타일 채우기 1. 문제 https://www.acmicpc.net/problem/2133 2. 풀이 3xN 크기의 벽을 2x1, 1x2 크기의 타일로 채우는 경우의 수를 구하는 것이다. 앞서 풀었던 타일 채우기 문제와는 살짝 달랐다. 앞에서 풀었던 타일 문제들은 N의 값이 늘어날 때 새로운 종류의 타일 모양이 나오지 않았다. 그러나 이 문제는 N이 2씩 늘어날때마다 새로운 모양 2개가 추가적으로 생겼다. 먼저 끝 2칸을 제외하면 3가지 방법이 나온다. 그리고 4칸, 6칸, 8칸.... 제외하면 2가지씩 추가적으로 생긴다. 그리고 3xN의 크기의 벽을 2x1, 1x2로 채우기 위해서는 N이 짝수이어야 한다. N이 홀수이면 넓..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/v8RzO/btqB2vJG1hN/FBHDJmBNjinYMklRXBDi40/img.png)
0. 제목 백준 4963 섬의 개수 BOJ 4963 섬의 개수 C++ 4963 섬의 개수 1. 문제 https://www.acmicpc.net/problem/4963 2. 풀이 백준 2667 단지번호붙이기 문제와 비슷한 문제이다. 2667번은 상하좌우를 따지는 것이었다면 이 문제에서는 대각선까지 고려해야한다. dfs에서는 여덟 방향 모두 탐색을 하면서 좌표가 0보다 작아지거나 주어진 넓이나 높이보다 같거나 커지면 넘어가면서 탐색한다. 재귀적으로 코드를 작성했으므로 여덟방향 중 이어진 부분이 있으면 그 덩어리를 전부 탐색완료 할 것이다. main함수에서 탐색을 할 때 값이 1이면서 방문하지 않은 부분을 반복문 내에서 탐색한다. 한 덩어리를 탐색완료 할 때마다 덩어리개수를 1씩 증가시켜준다. 탐색을 모두 마..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/H3rGJ/btqB2vplRg3/IMvOSD0PkNojxR9RopA9M1/img.png)
0. 제목 백준 1996 프린터 큐 BOJ 1996 프린터 큐 C++ 1996 프린터 큐 1. 문제 https://www.acmicpc.net/problem/1966 2. 풀이 중요도에 따라 출력되는 순서가 다르므로 우선순위 큐를 사용한다. C++ STL의 queue와 priority_queue를 사용한다. 먼저 q의 원소들을 입력받을 때 pair를 이용하여 인덱스와 중요도 값을 쌍으로 입력 받고 q에 push 해준다. 그리고 prioirity_queue pq; 와 같이 우선순위 큐를 선언한다. 우선순위 큐에는 중요도 값만 push 해준다. q의 원소가 0개가 아닌동안 루프를 돈다. q의 가장 먼저 들어온 원소 즉, 가장 앞에 있는 원소의 인덱스와 중요도 값을 변수 nowidx, nowval에 저장한다...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bJTH3E/btqB2ujpBTc/pJ1L37GqruOsxf2WKMIS0K/img.png)
0. 동기 & 비동기 동기(Synchronous) : 일이 처리되면서 그 일이 오랫동안 처리되야 되는 경우에도 기다렸다가 그 다음 일을 처리하는 것이 동기적으로 일을 처리하는 것이다. 비동기(Asynchronous) : 병렬적으로 동시에 여러가지 일을 처리하는 것이 비동기적으로 일을 처리하는 것이다. nodejs는 비동기적 처리를 위한 많은 기능을 가지고 있다. 효율적이지만 복잡하다. 동기적인 방식은 다음과 같다. sample.txt에는 'B'가 적혀있다. 실행결과 ABC가 출력된다. 다음은 비동기적인 방식이다. 실행결과 ACB가 출력된다. 1. callback함수 이름이 없는 함수를 익명함수라고 한다. 2. Package Manager PM2 와 같은 프로그램이 있다. 우리가 node를 실행했을 때 파..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c9QRgj/btqBZfIiyNb/KZfII24otcZnKAdmdLEhck/img.png)
0. 제목 백준 2170 선 긋기 BOJ 2170 선 긋기 C++ 2170 선 긋기 1. 문제 https://www.acmicpc.net/problem/2170 2. 풀이 먼저 from, to N쌍을 입력받는다. 그 후 from을 기준으로 정렬을 한다. 그럼 선끼리 겹치는 선들이 있을 것이고 겹치지 않는 선들이 있을 것이다. 겹치지 않는 경우에는 현재 길이에 l-r 만큼 더해주면 되고 겹치는 경우에는 오른쪽 끝을 다음 번 오른쪽 끝으로 갱신시켜주면 된다. 반복문이 끝난 후에는 마지막으로 갱신된 l-r을 더해주면 답이 나온다. 주의할 점은 이 문제에서 N과 선택한 지점의 범위가 크다. 따라서 main함수의 첫 세줄을 추가 하지 않았을 때는 시간초과로 떴다. 저 세줄을 추가하면 정답처리가 된다. 3. 코드 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bqEVfZ/btqBZMyOWhJ/j9k21qCifOtI1uSsPEGs8k/img.png)
0. 제목 백준 1699 제곱수의 합 BOJ 1699 제곱수의 합 C++ 1699 제곱수의 합 1. 문제 https://www.acmicpc.net/problem/1699 2. 풀이 dp방식을 사용하였다. 먼저 dp의 각 원소들을 1로만 이루어진 개수로 초기화시켰다. 이중반복문에서 i와 j는 1부터 시작할 필요가 없다. 이유는 dp[i] = i 여기서 초기화를 했는데 모두 1로 이루어진 경우를 나타낸 것이다. 따라서 2부터 시작해도 상관이 없다. 오히려 더 빠르다. dp[i] = min(dp[i], dp[i-j*j] + 1); 이 부분은 dp[i] 즉, 초기에 설정했던 값과 dp[i-j*j]+1 중 최솟값을 고르는 것이다. dp[i-j*j] 에 1을 더해주는 이유는 j*j에서 항이 1개 나오기 때문이다...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/elGuNK/btqBZNK5XAN/YkKXlKfJr8nfdszww9N1k1/img.png)
0. URL http://opentutorials.org:3000/main?id=HTML&page=12 http -> protocol opentutorials.org -> host(domain)(인터넷에 접속되어 있는 각각의 컴퓨터를 host라고 한다.) 3000 -> port(한 대의 컴퓨터에 여러 대의 서버가 있을 수 있다. 그러면 클라이언트가 접속했을 때 어떤 서버와 연결할지 애매하다. 그래서 port를 설정해준다. main -> path id=HTML&page=12 -> query string(웹서버에 데이터를 전달할 수 있다. 시작은 ?로 함. 값과 값은 &로 구분한다. 1. 동적인 웹페이지 만들기 http://localhost/?id=HTML 에서 id=HTML을 query string이라고 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cwk3Bs/btqBWCX5z00/16rKK7PLgwDvAVm32rcFE0/img.png)
0. 간단한 웹 서버 만들기 노드에 기본으로 들어 있는 http 모듈을 사용하면 웹 서버 기능을 담당하는 서버 객체를 만들 수 있다. http모듈을 require()메소드로 불러온다. http객체의 createServer()메소드를 호출하면 서버 객체가 반환된다. 이 서버 객체의 listen() 메소드를 호출하면 웹서버가 시작된다. 서버를 시작할 때는 포트를 3000번으로 지정하여 해당 포트에서 클라이언트의 요청을 대기한다. listen() 메소드를 호출할 때 전달하는 두 번째 파라미터는 콜백 함수로, 웹 서버가 시작되면 호출된다. listen(port[, hostname][, backlog][, callback]) -> 서버를 실행하여 대기시킨다. close([callback]) -> 서버를 종료한다...