분류 전체보기 248

[프로그래머스] n + 1 카드게임 (c++) 그리디 + 구현, 벡터의 삭제

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/258707?language=cpp 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법제일 처음에는 완전 탐색을 이용해가 위해 dfs를 활용해서, 모두 선택하는 경우, 하나만 선택하는 경우, 둘 다 선택하는 경우를 백트레킹을 활용해서 풀이하였다.하지만 시간 초과가 발생했다. 이에 그리디를 활용해서 풀이할 수 있음을 알게 되었다. 문제의 핵심은 코인을 사용해 짝을 맞출 수 있는 카드를 별도로 저장해 두는 것이다. 이를 통해, 기존에 가진 카드만으로는 짝을 맞추지 못할 경우 코인을 사용해 얻..

Algorithm 2024.11.08

[프로그래머스] 주사위 고르기 (c++) 조합

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/258709 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법각 모든 경우의 수의 조합을 다 구하면 된다.그러기 위해 dfs를 활용하여 백트레킹을 이용해 구현했다.만약 선택한 수가 cnt라면 가능한 승리 횟수를 구했는데여기서 visited 배열은 A가 선택한 주사위이다. A의 주사위만 선택하고 B의 주사위는 visited의 인덱스가 0인 것만 추가해 줬다.주사위를 다 선택하면 A와 B가 만들 수 있는 수를 구해야 한다. 이를 위해 또 dfs를 활용했다. 모든 가능한 수를 구해 벡터에 저..

Algorithm 2024.11.08

[백준] 사다리 조작 15684번 (c++) 구현

출처 : https://www.acmicpc.net/problem/15684 풀이 방법최대 설치 사다리가 3개이므로 완전 탐색 + 구현으로 풀이했다.설치된 사다리를 어떤 자료구조로 저장할지도 중요하다.ladder[y][x] 배열에 설치 유무를 저장했다.  의미는 y번째 가로줄에 x번째 세로줄에서 x+1번째 세로줄로 연결된 위치이다.  작성해야 하는 함수1. i번째 세로줄이 i번째로 가는지 체크하는 함수2. i번째 사다리의 시뮬레이션 결과 어디로 도착할지 판단하는 함수3. 현재 자리에 설치가 가능한지 체크하는 함수(양 옆으로 있으면 못함)4. dfs 함수 (모든 경우를 다 체크하기 위해서) 인자로 (y, x, cnt) cnt == 사다리 설치 개수 완전 탐색을 위해 백트레킹을 해준다.백트레킹을 위해 lad..

Algorithm 2024.11.06

[백준] 사회망 서비스(SNS) 2533번 (c++) 그래프에서 dp

출처 :https://www.acmicpc.net/problem/2533 풀이 방법우선 완전 탐색을 이용해서 풀이했었다. 하지만 시간 초과가 발생한다. 해당 문제를 dp로 풀이하기 위해선 문제를 나누는 것이 가장 중요하고(순서를 정하기 위해), 이를 위해서 트리를 만들어야 한다.루트노드는 임의로 설정해도 상관이 없다. (첫 번째 노드로 설정) 트리를 만들었으므로 자식과의 관계만 고려하면 된다.현재가 얼리 아답터면 자식은 얼리 아답터, 얼리 아답터가 아닌경우 상관이 없으므로 둘 중 최솟값을 현재 노드의 dp에 더해준다.만약 현재가 얼리 아답터가 아니면 자식은 무조건 얼리 아답터가 되어야 하기 때문에 해당 경우만 더해준다.모든 자식을 돌며 자식의 dfs 값을 더해주면 된다.그리고 마지막 리프 노드를 처리하기..

Algorithm 2024.10.31

[백준] 집합 11723번 (c++) 비트마스킹

출처 : https://www.acmicpc.net/problem/11723 풀이 방법배열을 사용하여 풀이하는 방법도 있지만 비트를 사용한다면 더 빠르게 계산할 수 있다.unsigned int s = 0;을 선언하고 각 연산을 s에 해준다. addn 자리에 or 연산을 통해 1비트를 기록한다.s |= (1  removen 자리에 0을 and연산하여 무조건 0으로 만들어 준다.s &= ~(1  check해당 비트에 1과 and연산을 하여 1이 된다면 1 출력 0이면 0을 출력한다.s &  (1  toggle해당 비트자리에 1과 xor연산을 하여 비어 있으면 채워 넣어주고 값이 있다면 제거해 주는 연산을 수행한다.s ^= (1  all21에서 1을 빼주면 비트는 20자리까지 모두 1로 채워진다. 즉 모든 값..

Algorithm 2024.10.26

[코드트리] 고대 문명 유적 탐사 (c++) 구현

출처 : https://www.codetree.ai/training-field/frequent-problems/problems/ancient-ruin-exploration/description?page=2&pageSize=5 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.www.codetree.ai 풀이 방법구현 문제이기 때문에 구현해야 할 함수들만 잘 정리해서 구현해 주면 된다. 1. rotate_90(int y, int x, int cnt):  • 특정 좌표 (y, x)를 중심으로 시계 방향으로 cnt만큼 90도 회전시킨다. • 회전할 3x3 영역의 좌표 값을 미리 rotate..

Algorithm 2024.10.26

세션 하이제킹

세션 하이제킹이란 세션을 가로챈다는 의미이다.TCP연결에서 시퀀스 번호를 조작해서 하이제킹 한다. Non-Blind Attack 공격 타켓이 누군지 알고, 시퀀스 넘버를 조작할 수 있다.Blind Attack공격 타켓이나, 시퀀스 넘버를 알아낼 수 없다. TCP연결에서 sequence numberClient_My_Seq : 클라이언트가 관리하는 시퀀스 넘버Client_Server_Seq : 클라이언트가 아는 서버 시퀀스 넘버Server_My_Seq : 서버가 관리하는 시퀀스 넘버Server_Client_Seq : 서버가 아는 클라이언트 시퀀스 넘버 아래는 일반적인 TCP 연결 과정이다.새로운 연결을 이용해서 시퀀스 번호를 다음과 같이 만들어 줄 것이다.Client_My_Seq = Server_Client..

보안 2024.10.18

[백준] 상어 초등학교 21608번 (c++) 구현, 우선순위 큐 정렬

출처 : https://www.acmicpc.net/problem/21608풀이 방법호흡이 길 뿐 어려운 문제는 아니다 순서대로 하나씩 배열한 후 점수를 구하면 된다.다음 좌석을 구하기 위해 선호하는 학생 수 , 빈자리 수, y가 작은, x가 작은으로 정렬을 하기 위해 모든 자리를 돌며 우선순위 큐를 사용해서 다음 자리를 선택했다. 주의 점기본적인 우선순위 큐는 MAX Heap이다bool operator 위 함수는 작은 경우 true를 리턴해야 하므로 주의해야 한다. 일반적인 sort에서 사용하려는 사용자 정의 cmp은 다름점수 계산시 모든 좌석을 배정 다 한 후 해야 한다. 전체 코드#include #include #include #include using namespace std;int N, stud..

Algorithm 2024.10.10

[백준] 선 긋기 2170번 (C++) 라인스와핑

출처 :https://www.acmicpc.net/problem/2170풀이 방법라인스와핑 문제로 경우를 나누면 탐색 한 번으로 풀이할 수 있다.먼저 선을 시작 좌표, 마지막 좌표 기준으로 정렬한다.그 후 줄이 끊기는 경우와 연장되는 경우를 나누어 풀이하면 된다.줄이 연장이 되려면 현재 줄의 end보다 다음 줄의 시작 부분의 좌표가 작아야 한다. 그리고 현재 줄의 마지막과 다음 줄의 마지막 중 좌표가 큰 것을 end 좌표로 설정한다. 끊기는 경우는 다음 시작 좌표가 현재 end좌표보가 큰 경우로 이때 끊긴 줄의 길이를 더해주고 start, end값을 초기화해준다. 루프를 다 돈 후 마지막 줄에 대해 더해주는 과정이 필요하다. 입력이 많은 문제이므로 아래 코드를 추가하지 않으면 시간초과가 발생한다.  ..

Algorithm 2024.10.10

[백준] 미세먼지 안녕! 17144번 (c++) 구현, 로컬 배열 선언의 중요, 탐색 순서의 중요

출처 : https://www.acmicpc.net/problem/17144 풀이 방법문제의 핵심미세 먼지는 동시에 전파된다.임시 배열을 사용해서 한 번에 업데이트하면 된다.임시 배열을 로컬 변수로 선언했다. 로컬 배열은 항상 memset으로 초기화 해야한다.공기 청정기의 미세먼지 밀어내기 구현코너 부분에서 간단하게 구현하기 위해 밀어내기를 구현하는 순서가 중요하다.윗부분 같은 경우 왼쪽, 밑, 오른쪽, 위 쪽 순서로 밀어낸다면 코너 부분에 크게 신경 쓰지 않아도 된다.공기 청정기 위 아래 구하기두 입력을 받고 정렬을 통해 위 아래 구분이 가능하다.#include #include #include #include using namespace std;int R, C, T;int room[51][51];vec..

Algorithm 2024.10.03