목록전체 글 (245)
말랑한 하루
※ 소스코드는 각 문제 설명 하단에 를 통해 확인하실 수 있습니다. [bronze1, 1524 세준세비] - 구현 간단한 정렬 및 비교를 진행하면 된다. 세비의 병사가 세준과 같을 때, 세비의 병사가 진다는 것에 유의한다 더보기 #include #include #pragma warning(disable:4996) using namespace std; int sejoon[1000001]; int sebi[1000001]; int main() { int tc; scanf("%d", &tc); for (int t = 0; t < tc; t++) { int N, M; scanf("%d %d", &N, &M); for (int n = 0; n < N; n++) scanf("%d", &sejoon[n]); for ..
단어가 일치하는지 확인하는 개념은, 연속 부분 문자열인 Substring이며 연속되지 않는 부분 문자열을 Subsequence라고 한다. 기본 구현 과정 1) 첫번째 행과 열을 0으로 맞춘다 2) 기준이 되는 열에 행의 문자를 넣고, 문자가 일치하면 행렬값에 1을 더한다 3) 행 테이블의 값은 이전 테이블 값의 누적된 값이 기록되며, 새롭게 매칭되는 문자가 나왔을 때 다음을 생각한다 ☆ 3-1) 현재 서로다른 문자열인 경우, 현재 테이블에 들어갈 수는 (왼쪽or위쪽중 큰 값)을 따라간다 ☆ 3-2) 현재 서로같은 문자열인 경우, 현재 테이블에 들어갈 수는 (왼쪽위 대각선 값 + 1)이다 4) LCS의 최종 길이는 행렬의 마지막 부분인 (r-1,c-1)의 값이다 void LCS() { string R, C..
유클리드 호제법을 이용해 최대공약수와 최소공배수를 구하는 기본 알고리즘이다 1. 큰 숫자를 작은 숫자로 mod연산 2. 작은 숫자를 1.의 결과와 mod연산 3. mod연산 결과가 0이 나올때 까지 2.과정을 반복 4. mod연산 결과가 0이 나왔을 때, 나누는 수가 두 수의 [최대공약수] 5. 두 수를 곱한 수를 최대공약수로 나누면 [최소공배수] // 최대공약수: Greatest Common Division int gcd(int a, int b) { int c = a % b; while (c != 0) { a = b; b = c; c = a % b; } return b; } // 최소공배수: Least Common Multiple int lcm(int a, int b) { return (a * b) /..
※ 소스코드는 각 문제 설명 하단에 를 통해 확인하실 수 있습니다. [bronze1, 1292] - 구현 배열의 수를 1001로 정확히 잡을 시, OutOfBounds 런타임에러가 뜬다 등차로 증가하는 idx를 n번 반복하기 때문이므로 넉넉히 2001이상 잡아주도록 하자 더보기 #include #pragma warning(disable:4996) using namespace std; int A, B, ary[1001]; int main() { scanf("%d %d", &A, &B); int idx = 1; for (int i = 1; i > name; for (int i = 0; i < name.length(); i++) { switch (name[i]) { case 'L': yondu[0]++; br..
※ 소스코드는 각 문제 설명 하단에 를 통해 확인하실 수 있습니다. [bronze1, 1236 성 지키기] - 구현 가로 세로 경비원이 겹치지 않은 좌표의 개수를 세면 된다 생각했지만, 예제 1번과 3번에서 가로/세로 특정 줄에 X가 하나도 없는 경우에 의해, 조금 더 생각이 필요했다 그래서 가로와 세로에 경비원이 존재하는지 판단하는 배열을 두고 교차지점에 경비원이 존재하는지 판단하여 없는 경우 추가하며 a-z를 확인했고, 이후 가로와 세로줄에 경비원이 존재하는지 판단하여 두 경우의 합을 구해주면 됐다 더보기 #include #include #pragma warning(disable:4996) using namespace std; int N, M; char map[51][51]; bool r[51]; b..
※ 소스코드는 각 문제 설명 하단에 를 통해 확인하실 수 있습니다. [bronze1, 1032 명령 프롬프트] - 단순 구현 파일 이름을 입력받을 때, 이름이 다른 부위를 ?로 변경한다 더보기 #include #include #pragma warning(disable:4996) using namespace std; char file_name[51]; int main() { int t; scanf("%d", &t); char name[51]; scanf("%s", &file_name); int len = strlen(file_name); for (int i = 0; i < t-1; i++) { scanf("%s", &name); for (int j = 0; j < len; j++) { if (file_na..
[ 학습 내용 ] Floyd-Warshall 지문 내용 복기 필요 false로 초기화 된 2차원 배열을 만드는 방법 let 2dArray = [...Array(n)].map(_ => Array(n).fill(false)); [ 소스 코드 ] function solution(n, results) { let game = [...Array(n)].map(_ => Array(n).fill(false)); results.forEach(([a, b]) => game[a-1][b-1] = true); const floyd = () => { for(let k=0; k
[ 학습 내용 ] 1. 노드를 생성하는법 2. 노드연결리스트를 생성하는 법 3. 노드를 삭제하는 법 4. 노드를 되돌리는 법 [ 소스 코드 ] function solution(n, k, cmd) { // Link Node 생성, 생성시 화살표함수 표기법 불가능 const Node = function (index, prev) { this.index = index; this.prev = prev; this.next = null; } let prevNode = new Node(0); let select; // LinkedList 생성 for(let i=1; i { for(let i=0; i { const prev = select.prev; const next = select.next; deleteBin.pus..