목록Programming/BOJ (67)
블로그 언저리인 무언가
문제 : 1081번: 합 각 자리 별로 숫자를 나누어서 현재 자릿수의 숫자합을 계산하여 더하는 식으로 구하였다.현재 자릿수를 기준으로 hi / x / lo 세 부분으로 나누면[hi*자릿수*1~9까지의 합]+[자릿수*1~x-1까지의 합]+[x*(lo+1)]이렇게 세 파트로 나누어 보는 것이 가능하므로 해당 방식으로0~N까지의 합을 구해 차이를 출력하면 된다.Code#include #define ll long longusing namespace std;ll N, M;ll f(ll num){ ll ret=0; vector v(1,0); // 0~9까지의 누적합 저장 for (int i=1;i> N >> M; cout
문제 : 32990번: 시설물 사용 신청 신청을 하는 시간기준으로 나누어 생각하면시간대의 길이가 x일 때 최대 강의실 x개 안에 나눌 수 있음을 알 수 있다.이때, x가 N/2보다 크다면 각 시간대 별로 하나의 강의실을 차지하므로N-x개의 강의실에만 배치해도 된다. Code#include #define ll long longusing namespace std;ll N, ans;int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> N; for (ll i=1;i=i*2) ans+=i; // 같은 강의실을 여러번 사용하는 경우 else ans+=N-i; // 한번..
문제 : 8980번: 택배 그리디하게 접근하여트럭이 가장 가까운곳에 배달할 수 있는최대한의 택배를 실고 있다고 가정하고 풀면 된다.문제의 조건에서는 박스를 받는 마을에서만 내릴 수 있지만,그 마을에서 안실었다고 가정하여 배송한 택배수에서만 빼버리는 식으로바꾸어 생각하면 쉽게 코드를 작성할 수 있다.Code#include #define ll long longusing namespace std;struct box{ ll idx, val; //배송위치, 개수 bool operator v[2005];deque dq;int main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> N >> C >> M; while (M--){ ll a..
문제 : 16236 아기 상어 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net 상어가 움직이는 조건이 고정되어 있으므로 BFS를 이용해 가장 가까운 물고기를 찾아 이동해 잡아먹는 것을 반복하면 된다. 상어와 여러 물고기의 거리가 같을때 우선순위에 따라 이동하는 것만 잘 설계해주면 크게 어렵지는 않은 문제이다. Code #include #define ll long long #define INF 1e9+7 using namespace std; typedef pair pll; struct ABC{ ll x, ..
문제 : 20301 반전 요세푸스 20301번: 반전 요세푸스 첫째 줄에 정수 $N$, $K$, $M$이 주어진다. ($1 \leq N \leq 5\ 000$, $1 \leq K, M \leq N$) www.acmicpc.net 덱 자료구조를 이용해서 구현하면 실제로 사람들의 위치를 이동시켜 쉽게 구현할 수 있다. Code #include #define ll long long using namespace std; ll N, M, K, chk=1, cnt; deque dq; int main(){ cin >> N >> K >> M; for (int i=1;i
문제 : 20365 블로그2 20365번: 블로그2 neighbor 블로그를 운영하는 일우는 매일 아침 풀고 싶은 문제를 미리 정해놓고 글을 올린다. 그리고 매일 밤 각각의 문제에 대하여, 해결한 경우 파란색, 해결하지 못한 경우 빨간색으로 칠한 www.acmicpc.net 연속된 색깔들은 한 번에 색칠할 수 있으므로 각색깔 별로 묶음의 수를 구하고 둘 중 많은 쪽을 한 번에 바탕색으로 칠해준다고 생각하면 그리디 하게 접근할 수 있다. Code #include #define ll long long using namespace std; ll N, R, B; char c; int main(){ cin >> N; for (int i=0;i> a; if (a=='R' && (!i || (i && c!='R'))..
문제 : 1025 제곱수 찾기 1025번: 제곱수 찾기 첫째 줄에 N, M이 주어진다. 둘째 줄부터 N개의 줄에는 표에 적힌 숫자가 1번 행부터 N번 행까지 순서대로 한 줄에 한 행씩 주어진다. 한 행에 적힌 숫자는 1번 열부터 M번 열까지 순서대로 주어지 www.acmicpc.net 각 좌표의 위치가 등차수열을 이루도록 해야 하므로 시작 위치를 정한 다음에 좌표를 옮겨가면서 이어 붙인 정수가 제곱수인지 확인해보고 최댓값을 갱신해 출력해주면 된다. Code #include #define ll long long using namespace std; ll N, M, ans=-1; string arr[15]; ll f(ll x, ll y){ ll ret=-1; for (int i=-9;i> M; for (in..