일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 알고리즘
- 맛집
- 다이나믹 프로그래밍
- PS
- Algorithm
- 브루트포스
- C++
- BOJ
- 삼성 기출
- 해커랭크
- 삼성 SDS 대학생 알고리즘 특강
- SWEA
- dfs
- 완전탐색
- 구현
- sw expert academy
- 스택
- 소수
- BFS
- koitp
- 백준
- 에라토스테네스의 체
- 동적 계획법
- 시뮬레이션
- dynamic programming
- 백트래킹
- 그리디
- DP
- 잠실
- hackerrank
- Today
- Total
목록Study/PS(Algorithm) (93)
펭로그
문제링크 : https://koitp.org/problem/SDS_TEST_CONSULTING [삼성 SDS 대학생 알고리즘 특강 사전 테스트 A Type 4번 문제]최대 상담 고객의 수 : 최소 상담시간 조건을 충족해야 한다. 수진이의 근무시간을 최소 상담시간으로 나눈 몫을 취하면 된다.최소 상담 고객의 수 : 고객들이 원하는 상담시간 모두를 더하면 된다. 단, 수진이의 근무시간을 초과하기 전까지로 한다.최소 ~ 최대 사이의 값으로 loop를 돌려서 값을 구하면 된다. 1. 고객 당 10점씩 받을 수 있기 때문에 고객의 수 만큼 10점씩 누적시킨다.2. 모든 고객이 최소 시간만큼만 상담한다고 가정하고 수진이의 근무시간에서 최소 시간만큼만 뺀다.3. 남아있는 시간을 효율적으로 사용하려면 불만족 지수를 3..
문제링크 : https://koitp.org/problem/SDS_TEST_CLOCK [삼성 SDS 대학생 알고리즘 특강 사전 테스트 B Type 4번 문제]FND의 7-segment를 보자마자 bit 연산으로 풀어야겠다고 생각이 든 문제이다.0~9 까지의 모든 bit 순서를 저장한 배열을 만들고 각 숫자와 XOR 연산을 하게되면 어떤 부분이 다른지 여부가 체크된다.이 다른 부분의 bit 갯수가 4개의 segment 모두 합쳐 2개 이하가 되는 최소 값을 구하면 된다.4중 for문을 사용하여 코드가 매우 지저분하지만 for문이 각각 상수 횟수 만큼 실행되기 때문에 O(1)이다.탐색 조건은 반드시 00:00 ~ 23:59 범위 내로 한정해야 한다. 최소로 나올 수 있는 값이 32:00 이런식으로 되버리면 ..
문제링크 : https://koitp.org/problem/SDS_TEST_SURVIVOR [삼성 SDS 대학생 알고리즘 특강 사전 테스트 A Type 2번 문제]모든 배열을 하나 하나 탐색하여 풀었다. 배열의 각 원소를 중심으로 3*3 내에 불모지가 없고 물, 산, 초원이 모두 있는지를 구하면 된다.4중 for문이라 코드가 조금 지저분하긴하다.맵의 가장자리에 도달했을 경우의 예외 처리를 위하여 if(i==0 && a==-1) continue; 같은 구문을 4번이나 넣었는데....사실 맵의 크기를 상하좌우로 1씩 더 늘려서 만들었다면 굳이 넣지 않아도 되었을 코드이다. 1234567891011121314151617181920212223242526272829303132333435363738394041424..
문제링크 : https://koitp.org/problem/SDS_TEST_SPACE [삼성 SDS 대학생 알고리즘 특강 사전 테스트 A Type 1번 문제]1. 맵의 끝부분에서 이동하게 되면 반대편으로 이동된다.2. X 성분의 값과 Y 성분의 값을 각각 구해서 계산하는 편이 수월하다.위 두가지 조건을 가지고 간단하게 시뮬레이션을 해보면 쉽게 풀리는 문제다.빨간색 화살표는 r1과 r2 사이의 거리를 의미하는 것으로 |r2 - r1| 을 abs(r2 - r1) 로 나타낼 수 있다.파란색 화살표는 맵의 끝에서 r1까지의 거리, 맵의 끝에서 r2까지의 거리를 더한 것으로 그냥 r1 > T; for (int t = 0; t > N >> M >> r1 >> c1 >> r2 >> c2; int result = 0;..
문제링크 : https://koitp.org/problem/SDS_TEST_PAGE [삼성 SDS 대학생 알고리즘 특강 사전 테스트 A Type 3번 문제]처음으로 읽은 페이지를 시작으로 하여 건너뛸 페이지수 + 1 만큼 더해가면서 푸는 방법도 좋지만 이렇게 할 경우 (전체페이지수 - 초기페이지) / (스킵페이지 + 1) 만큼 실행을 해야한다.어짜피 input으로 받은 값들은 모두 다 if 문으로 조건을 판별해야하기 때문에 이 방법이 훨씬 더 낫다.(쉬어가는 페이지 - 초기페이지)가 (스킵페이지 + 1)로 나누어 떨어지는가를 체크하면 더 쉽고 빠르게 풀 수 있다. 123456789101112131415161718192021222324252627282930313233// KOITP_SDS_Atype_03#..
문제링크 : https://www.acmicpc.net/problem/2839 1. 설탕은 3kg과 5kg 두가지 밖에 존재하지 않는다.2. 두 무게로 나누어 떨어지지 않으면 무조건 무시된다.3. 최적의 값을 구하려면 5kg이 최대한 많아야 한다.4. 3kg씩 빼가면서 5의 배수가 최초로 나오는 시점이 가장 최적의 답이 될 수 있다. 1234567891011121314151617181920212223242526// BOJ 2839 설탕배달#include using namespace std; int main() {// freopen("../input.txt", "r", stdin); int n; cin >> n; int a = 0; int ans = -1; while(n >= 0){ if(n % 5 == ..
문제링크 : https://www.hackerrank.com/challenges/torque-and-development 1234567891011121314151617181920212223242526#include using namespace std;vector p;int f(int a) { return p[a] == a ? a : p[a] = f(p[a]); }void u(int a, int b) { p[f(a)] = f(b); }int main() { int T; cin >> T; while (T--) { int N, M, a, b; long long c, d; cin >> N >> M >> c >> d; p.clear(); p.resize(N); iota(p.begin(), p.end(), 0); ..
문제링크 : https://www.hackerrank.com/challenges/counter-game 1234567891011121314151617181920212223242526272829#include using namespace std; string counterGame(unsigned long long int n) { // Complete this function int cnt = 0; while(n) { n &= (n-1); cnt++; } if(cnt&1) return "Louise"; else return "Richard"; //return cnt%2?"Louise":"Richard";} int main() { int t; cin >> t; for(int a0 = 0; a0 > n; cout
문제링크 : https://www.hackerrank.com/challenges/tower-breakers-1 1234567891011121314151617181920212223242526#include using namespace std; int towerBreakers(int n, int m) { if(m == 1) return 2; if(n % 2) return 1; else return 2;} int main() { int t; cin >> t; for(int i = 0; i > n >> m; int result = towerBreakers(n, m); cout
문제링크 : https://www.hackerrank.com/challenges/sansa-and-xor 1234567891011121314151617181920212223242526272829303132#include using namespace std; int sansaXor(vector arr) { // Complete this function int res = 0; if(!(arr.size() % 2)) return 0; else{ for(int i = 0; i > t; for(int a0 = 0; a0 > n; vector arr(n); for(int arr_i = 0; arr_i > arr[arr_i]; } int result = sansaXor(arr); cout