본문 바로가기

컴퓨터공학54

[알고리즘] 2차원 배열 시계 방향 회전, 180도 회전, 전치 행렬 구하기 외우면 구현 빠른 알고리즘 시계 방향 회전 (90도 회전) // origin[ROW][COL] // rotated[COL][ROW] for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { rotated[j][ROW-1-i] = origin[i][j]; } } 반시계 방향 회전 (270도 회전) // origin[ROW][COL] // rotated[COL][ROW] for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { rotated[COL-1-j][i] = origin[i][j]; } } or 시계방향 * 3회 180도 회전 // origin[ROW][COL] // rotated[COL.. 2023. 4. 10.
[C++] 달팽이 알고리즘 정방향 행렬에서 시계 방향으로 탐색 시 N, N-1, N-1, N-2, N-2, ... , 2, 2, 1,1 순서로 값이 채워지는 규칙이 있다. 이 규칙을 이용하면 코드 축약에 도움을 준다. sign 을 사용하는 것은 x가 증가하는 쪽으로 변화하면 다음 y는 감소하는 쪽으로 변화하고, 반대로 y가 증가하면 x는 감소하기 때문이다. int size=N*N-1, sign=1; int x=0,y=0; // 초기 N번 한 번 for(int i(0) ; i0 ; i--){ for(int j(0) ; j 2023. 3. 22.
[프로그래머스] LV3 | 연속 펄스 부분 수열의 합 | C++ https://school.programmers.co.kr/learn/courses/30/lessons/161988 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근법 부분 수열이니까 누적합을 사용할 것이다. 수열이므로 이분탐색은 절대 아니다. {1, -1, 1, -1,...} 펄스를 사용하나 {-1, 1, -1, 1...} 펄스를 사용하나 누적합 배열의 원소 값은 차이가 없다. (부호만 다르다.) N이 최대 500,000 이므로 투포인터로 합이 최대인 구간을 찾는 것은 불가능하다. 오잉 배열의 최댓값과 최솟값의 차이가 기댓값이랑 같네??? 정답코드 #.. 2023. 3. 15.
[정수론] 효율적으로 모든 약수를 구하기 (C++) 1. 일반적으로 떠올릴 수 있는 약수 구하는 방법 vector function(int N){ vector v; // N의 약수 for(int i(1);i 2023. 3. 11.
동기(Synchronous)와 비동기(Asynchronous), 블로킹(Blocking)과 논블로킹(Non-Blocking) 스프링부트 웹 플럭스를 공부하기에 앞서 "동기가 블로킹이고 비동기가 논블로킹 비슷한 거 아냐?" 라고 생각해 정리한다. 앞으로 헷갈리는 CS, 안 외워지는 개념들 모조리 정리하여 포스팅 할 계획이다. 동기와 비동기 A스레드가 B스레드를 호출한 후 결과를 A가 처리하느냐 B가 처리하느냐 작업 완료 여부를 무엇이 신경쓰는지가 관건이다. 동기 A스레드가 B스레드를 호출한 후 결과를 받아 A스레드에서 결과를 처리한다. 결과를 대기하는 동안 A스레드는 다른 작업을 처리하지 못하고 대기하여 블로킹처럼 보일 수 있다. 비동기 A스레드가 B스레드를 호출한 후 결과는 B스레드에서 처리(Callback)한다. A스레드는 작업에 제약이 없다. 블로킹과 논블로킹 A스레드가 B스레드를 호출한 후 작업이 종료될 때까지 A스레드에.. 2023. 3. 9.
[백준] 12015번: 가장 긴 증가하는 부분 수열 2 | C++ 12015번: 가장 긴 증가하는 부분 수열 2 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000) www.acmicpc.net 정답코드 C++의 lower_bound, upper_bound C++에서는 이진탐색으로 원소를 탐색하는 lower_bound, upper_bound 메서드를 제공한다. lower_bound : 찾으려는 key 값보다 같거나 큰 숫자가 등장하는 인덱스를 반환한다. upper_bound : 찾으려는 key 값을 초과하는 숫자가가 등장하는 인덱스를 반환한다. int arr[]={0,1,2,3,4,5,5,5,6,7}; lower_bound(arr.begin(), arr... 2023. 2. 23.
[백준] 10971번: 외판원 순회 2 | C++ https://www.acmicpc.net/problem/10971 10971번: 외판원 순회 2 첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j www.acmicpc.net 1. 외판원 순회 알고리즘 - 가중치가 양의 정수이고 N이 작을 경우 (Sliver 2) 외판원 순회 문제는 영어로 Traveling Salesman problem (TSP) 라고 불리는 문제로 computer science 분야에서 가장 중요하게 취급되는 문제 중 하나이다. 여러 가지 변종 문제가 있으나, 여기서는 가장 일반적인 형태의 문제를 살펴보자.. 2022. 12. 25.
[백준] 2036번: 수열의 점수 | C++ https://www.acmicpc.net/problem/2036 2036번: 수열의 점수 n개의 정수로 이루어진 수열이 있다. 이 수열에서 한 정수를 제거하거나, 또는 두 정수를 제거할 수 있다. 한 정수를 제거하는 경우에는 그 정수가 점수가 되고, 두 정수를 제거하는 경우에는 두 www.acmicpc.net 틀린 이유 - 질문 답변 中 (https://www.acmicpc.net/board/view/21040) 아. 알고리듬이 맞은 거 같은데. 틀렸습니다가 뙇~ 하고 뜨면 오버플로우를 의심해 봐야 겠지요? long long 형 변수 = long long형 변수 + (int형 변수 * int형 변수) 인데 int형 변수의 절대치가 100만까지 들어올 수 있거든요.. 100만 * 100만이면 딱 봐도 1.. 2022. 12. 23.