1계층 (Physical Layer, 물리계층)직접 전선으로 전기적 신호가 전달되는 계층두 대의 컴퓨터가 통신하려면?모든 파일과 프로그램은 0과 1의 나열이다.결국 0과 1만 주고맏을 수 있으면 된다.0과 1의 나열을 아날로그 신호로 바꾸어 전선으로 흘려 보내고(encoding), 아날로그 신호가 들어오면 0과 1의 나열로 해석하여(decoding) 물리적으로 연결된 두 대의 컴퓨터가 0과 1의 나열을 주고받을 수 있게 해주는 모듈(module)1계층 모듈은 하드웨어적으로 구현되어 있음2계층 (DataLink Layer, 데이터링크계층)네트워크 기기들 간 어떻게 통신하는지 맞춰주는 계층1계층의 기술만으로는 여러대의 컴퓨터가 통신하지 못함스위치, 라우터 를 통해서 여러대의 컴퓨터가 통신을 할 수 있음같은 ..
https://www.codetree.ai/training-field/frequent-problems/problems/rudolph-rebellion/description?page=1&pageSize=20 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai 풀이과정 함수별로 모듈화를 잘 시켜야했으며, 구현과정이 복잡하다 보니 처음 시작할 때 자료구조를 잘 정해서 사용해야 했습니다. 사용한 클래스와 변수 전체적인 산타와 루돌프의 위치는 2차원 배열(int[][] map)에 정수형으로 저장하고, 세부정보를 저장하는 변수를 만들어서 2차원 배열(int[][] ..
https://www.acmicpc.net/problem/17822 풀이과정 1. 원판을 회전시키는 함수를 구현해야 합니다. ArrayList 혹은 LinkedList를 사용해서 구현할 수 있습니다. add, insert ,remove 함수를 활용하여 원판의 회전을 구현할 수 있습니다. 2. 원판에서 인접한 숫자들 끼리 일치여부를 확인해야 합니다. dfs를 통해 인접여부를 구현합니다. 인접하게 되면 -1로 원소를 변경하여 체크했습니다. 이때 같은 원판 내에서의 순회(?)를 구현해줘야 합니다. 예를들어 [2,3,4,2] 와 같은 원판인 경우 제일 앞 원소 2와 제일 뒤 원소 2는 인접해 있습니다. 따라서 dfs수행 중 인덱스가 -1이 되면 3으로, 4가 되면 0으로 보정을 해줘야 합니다. static bo..
예전 뱅킹 서비스를 주제로 한 프로젝트를 진행했지만, 동시성에 대한 처리를 해주지 못 한 점을 보완하기 위해 공부한 내용을 정리한 글입니다. 동시성 이슈 해결방법 synchronized 하나의 프로세스에서만 동작. 즉 서버가 여러대이고 서로 다른 서버에서 동시에 접근한다면 synchronized 는 기능을 발휘할 수 없다. @Transactional 을 사용하면, 트랜잭션이 커밋할 때 잠깐의 텀에 다른 스레드가 접근할 수 있어서 동시성 문제를 해결할 수 없다. Lock (DB에서 재공하는 락기능을 사용) Pessimistic Lock (비관적 락) row나 table 단위로 락을 검 자원 요청에 따른 동시성 문제가 발생할 것이라고 예상하고 락을 걸어버리는 비관적 락 공유락(Shared Lock)과 베타락..
https://www.acmicpc.net/problem/17142 풀이과정 0. 입력을 받을 때 채워야 할 빈칸의 갯수를 저장합니다. 1. 백트래킹을 활용해서 바이러스들의 조합을 선택합니다. 2. 선택된 바이러스들에 대해 bfs를 수행하여 퍼트립니다. 바이러스를 퍼트릴 때, 빈칸과 바이러스가 있는 칸에 대해 구분해서 코드를 작성해야 합니다. 빈 칸의 경우 0번 풀이과정에서 저장한 목표와 비교하기 위해 cnt값을 증가시켜 줍니다. 바이러스의 경우 cnt 값을 증가시키지 않고 방문처리와 bfs큐에 넣는 동작만 수행합니다. 처음에는 swea의 지뢰문제와 헷갈려서 바이러스를 만나면 계속 퍼지도록 구현해서 계속 틀렸습니다 ㅠㅠ 3. 빈 칸을 다 채웠으면 이동한 시간을 return 합니다. bfs에서 시간은 계속..
N = 행 길이 M = 열 길이 int[][] origin = { {1,2,3}, {4,5,6}, {7,8,9} }; // 원본 배열 int[][] result; // 회전 배열 시계 방향 90도 회전 : (i,j) = (N-1-j, i) 혹은 (j, N-1-i) = (i,j) for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { rotate_arr[i][j] = arr[N - 1 - j][i]; } } 반 시계 방향 90도 회전 : (i,j) = (j, N-1-i) 혹은 (N-1-j, i) = (i, j) for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { rotate_arr[i][j] = ar..
구현 코드만 간략하게 작성..(외우기 위해서 😂) 리스트에 순차적으로 접근해야 할 때 사용할 수 있습니다. 투 포인터 알고리즘 기본 포멧int N = 5; // 데이터의 개수 Nint M = 5; // 찾고자 하는 부분 합 Mint[] data = {1,2,3,2,5};int cnt = 0;int interval_sum = 0;int end = 0;for(int start=0;start