목록Algorithm (19)
JLOG
# https://www.acmicpc.net/problem/13460 def move(y, x, dy, dx) : cnt = 0 ny, nx = y, x while (mmap[ny+dy][nx+dx] != "#" and mmap[ny][nx] != "O") : ny += dy nx += dx cnt += 1 return ny, nx, cnt N, M = map(int, input().split(" ")) mmap = [] for w in range(N) : line = input() if line.find('R') != -1 : ry, rx = w, line.find('R') if line.find('B') != -1 : by, bx = w, line.find('B') if line.find('O') ..
1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net 문제 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 쌓여서 FIFO - First In First Out - 에 따라 인쇄가 되게 된다. 하지만 상근이는 새로운 프린터기 내부 소프트웨어를 개발하였는데, 이 프린터기는 다음과 같은 조건에 따라 인쇄를 하게 된다. 현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를 확인한다...
#include /* 1929 소수 https://www.acmicpc.net/problem/1929 */ int array[1000001]; int main(void){ int m, n; //, cnt=2; std::cin>>m>>n; for (int i=1; i
#include #include using namespace std; /* 부호 https://www.acmicpc.net/problem/1247 if 문에서 overflow 발생 시 undefined behavior에 해당되 자동으로 false 처리 LONG_MAX, LONG_MIN 이용해서 overflow를 안 일으키고 검사하는 것이 포인트 https://www.acmicpc.net/board/view/56858 */ int main(void){ long long result=0, overflow=0; int n; for (int test_case=0; test_case>n; result = 0; overflow = 0; for (int i=0; i < n; i++){ long long tmp; st..
랜선 자르기 시간 제한 메모리 제한 2 초 128 MB 문제 집에서 시간을 보내던 오영식은 박성원의 부름을 받고 급히 달려왔다. 박성원이 캠프 때 쓸 N개의 랜선을 만들어야 하는데 너무 바빠서 영식이에게 도움을 청했다. 이미 오영식은 자체적으로 K개의 랜선을 가지고 있다. 그러나 K개의 랜선은 길이가 제각각이다. 박성원은 랜선을 모두 N개의 같은 길이의 랜선으로 만들고 싶었기 때문에 K개의 랜선을 잘라서 만들어야 한다. 예를 들어 300cm 짜리 랜선에서 140cm 짜리 랜선을 두 개 잘라내면 20cm는 버려야 한다. (이미 자른 랜선은 붙일 수 없다.) 편의를 위해 랜선을 자르거나 만들 때 손실되는 길이는 없다고 가정하며, 기존의 K개의 랜선으로 N개의 랜선을 만들 수 없는 경우는 없다고 가정하자. 그..
스택 수열 시간 제한메모리 제한 제출 정답 맞은 사람정답 비율 2 초 128 MB 56234 19274 13796 34.094% 문제 스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다. 1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을..
체스판 다시 칠하기 시간 제한 : 2초 메모리 제한 : 128 MB 문제 지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M*N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 8*8 크기의 체스판으로 만들려고 한다. 체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 이 정의를 따르면 체스판을 색칠하는 경우는 두 가지뿐이다. 하나는 맨 왼쪽 위 칸이 흰색인 경우, 하나는 검은색인 경우이다. 보드가 체스판처럼 칠해져 있다는 보장이 없어서, 지민이는 8*8 크기의 체스판으로 잘..
알고리즘 문제를 풀면서 cout과 cin보다 printf과 scanf의 속도가 더 빠르다는 것을 알았다. cout, cin를 사용할 때 속도를 높이려면 아래와 같은 구문을 추가해주면 된다고 한다. // c와 c++ 입출력의 동기화를 사용하지 않음 ios::sync_with_stdio(false); // cin과 cout의 묶음을 풀어줌 cin.tie(NULL); cout.tie(NULL); 구문 설명 ios::sync_with_stdio(false); c++은 c의 입출력함수(printf, scanf)를 사용할 수 있다. 이 때 iostream과 stdio의 버퍼를 모두 사용하여 딜레이가 발생한다. c 입출력 동기화를 비활성화시켜, c++만의 독립적인 버퍼를 사용해 실행 속도를 개선시킨다. 멀티 쓰레드 ..
Greedy Algorithm(욕심쟁이 알고리즘, 탐욕 알고리즘,탐욕법) 그리디 알고리즘이란? 그리디 알고리즘이란 "매 선택에서 지금 이 순간 당장 최적인 답을 선택하여 적합한 결과를 도출하자" 라는 모토를 가지는 알고리즘 설계 기법이다. 주의할 점은 지금 당장 최적의 선택이라고 해도 결과적으로는 최선의 결과가 아닐 수 있다. 즉, 그리디 알고리즘은' 되는가'를 확인하거나 '적당한 결과'를 도출해내는 알고리즘이라 생각할 수 있다. 그리디 알고리즘을 사용하기에 적절한 문제는, -탐욕 선택 속성(greedy choice property) -최적 부분 구조(optimal substructure)의 특성을 가지는 문제들을 해결하기에 좋다. 즉, 1) 한번의 선택이 다음 선택에는 전혀 무관한 값 2) 매 순간의 ..
codeup.kr/problem.php?id=2632 계단 오르기 1 계단을 오를 수 있는 방법의 수를 출력한다. codeup.kr n번째 계단을 오르는 경우의 수는 n-2번째 계단을 두번 오르는 수와 n-1번째 계단을 한번 오르는 수의 합이다. 예를 들어서 확인해보면, 1번째 계단을 오르는 수는 -1번째 계단을 두번 오르는 수(0) + 0번째 계단을 한번 오르는 수(1) = 1 2번째 계단을 오르는 수는 0번째 계단을 한번에 두번 오르는 수(1) + 1번째 계단을 한번 오르는 수(1) = 2 3번째 계단을 오르는 수는 1번째 계단을 한번에 두번 오르는 수(1) + 2번째 계단을 한번 오르는 수(2) = 3 4 : 2 + 3 = 5 5 : 3 + 5 = 8 ... 처럼 직접 계산해보면서 확인할 수 있다...