전체보기

🥇코딩테스트:Algorithm

왕실의 기사 대결(삼성 sw역량테스트)

https://www.codetree.ai/training-field/frequent-problems/problems/royal-knight-duel/description?page=1&pageSize=20 구현 + bfs 풀이과정 0. 모듈화된 함수를 다 호출하는 solve함수. static void solve(int n,int d) { if(knights[n].isOut) return; // 1. 해당 방향으로 이동이 가능한지 확인하기 if(!movable(n,d)) return; // 2. 이동시키기 moved = new boolean[N+1]; move(n, d); moved[n] = false; // 명령받은 n번 기사는 움직임에서 제외 // 3. 데미지 계산하기 (명령을 받은 n번 기사는 데미지..

🥇코딩테스트:Algorithm

루돌프의 반란(삼성 sw역량테스트)

https://www.codetree.ai/training-field/frequent-problems/problems/rudolph-rebellion/description?page=1&pageSize=20 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai 풀이과정 함수별로 모듈화를 잘 시켜야했으며, 구현과정이 복잡하다 보니 처음 시작할 때 자료구조를 잘 정해서 사용해야 했습니다. 사용한 클래스와 변수 전체적인 산타와 루돌프의 위치는 2차원 배열(int[][] map)에 정수형으로 저장하고, 세부정보를 저장하는 변수를 만들어서 2차원 배열(int[][] ..

🥇코딩테스트:Algorithm

[백준] 원판 돌리기

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..

💎백엔드 : Backend

동시성 처리

예전 뱅킹 서비스를 주제로 한 프로젝트를 진행했지만, 동시성에 대한 처리를 해주지 못 한 점을 보완하기 위해 공부한 내용을 정리한 글입니다. 동시성 이슈 해결방법 synchronized 하나의 프로세스에서만 동작. 즉 서버가 여러대이고 서로 다른 서버에서 동시에 접근한다면 synchronized 는 기능을 발휘할 수 없다. @Transactional 을 사용하면, 트랜잭션이 커밋할 때 잠깐의 텀에 다른 스레드가 접근할 수 있어서 동시성 문제를 해결할 수 없다. Lock (DB에서 재공하는 락기능을 사용) Pessimistic Lock (비관적 락) row나 table 단위로 락을 검 자원 요청에 따른 동시성 문제가 발생할 것이라고 예상하고 락을 걸어버리는 비관적 락 공유락(Shared Lock)과 베타락..

🥇코딩테스트:Algorithm

[백준] 연구소 3 (조합, bfs)

https://www.acmicpc.net/problem/17142 풀이과정 0. 입력을 받을 때 채워야 할 빈칸의 갯수를 저장합니다. 1. 백트래킹을 활용해서 바이러스들의 조합을 선택합니다. 2. 선택된 바이러스들에 대해 bfs를 수행하여 퍼트립니다. 바이러스를 퍼트릴 때, 빈칸과 바이러스가 있는 칸에 대해 구분해서 코드를 작성해야 합니다. 빈 칸의 경우 0번 풀이과정에서 저장한 목표와 비교하기 위해 cnt값을 증가시켜 줍니다. 바이러스의 경우 cnt 값을 증가시키지 않고 방문처리와 bfs큐에 넣는 동작만 수행합니다. 처음에는 swea의 지뢰문제와 헷갈려서 바이러스를 만나면 계속 퍼지도록 구현해서 계속 틀렸습니다 ㅠㅠ 3. 빈 칸을 다 채웠으면 이동한 시간을 return 합니다. bfs에서 시간은 계속..

🥇코딩테스트:Algorithm

배열 시계방향 회전 공식

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..

🥇코딩테스트:Algorithm

투포인터 알고리즘

구현 코드만 간략하게 작성..(외우기 위해서 😂) 리스트에 순차적으로 접근해야 할 때 사용할 수 있습니다. 투 포인터 알고리즘 기본 포멧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

🥇코딩테스트:Algorithm

[백준] 드래곤 커브 (구현)

문제 : https://www.acmicpc.net/problem/15685 풀이과정 1. 드래곤 커브를 그리는 함수를 구현해야 합니다. 1-1. 리스트를 활용 드래곤 커브는 현재까지 만들어진 모양을 바탕으로 새로운 모양을 만들게 됩니다. 리스트를 활용해서 드래곤 커브의 방향을 구현했습니다. 1-2. 90도 회전 90도 회전의 경우 0 방향은 1 1 방향은 2 2 방향은 3 3 방향은 0 이 됩니다. (현재방향+1)%4 연산을 통해 이를 구현할 수 있습니다. static void update_history(){ // g번 이동시키기 for(int i=0;i=0;j--){ history.add((history.get(j)+1)%4); } } } 1-3. 두 번 이동 시키기 정사각형의 갯수를 구하기 위해 드..

mc.thd
'분류 전체보기' 카테고리의 글 목록 (2 Page)