구현 373

백준 2138번 전구와 스위치

문제 링크입니다: https://www.acmicpc.net/problem/2138 재미있는 그리디 문제였습니다.N은 최대 100,000이기 때문에 단순 재귀 호출을 통해 풀려고 한다면 메모리초과가 발생합니다.따라서, 그리디하게 접근해야합니다. 알고리즘은 아래와 같습니다.1. 0번째 스위치를 누르지 않고 시작하는 경우와 0번째 스위치를 누르고 시작하는 경우로 나눕니다.2. 모든 경우를 재귀 호출하는 경우 메모리 초과가 나기 때문에 보고 있는 인덱스 직전의 전구 상태를 봅니다.- 인덱스를 한번 지나가면 다시 돌아오지 않기 때문에 확인하고 있는 (인덱스 - 1)에 위치한 전구의 상태를 보고 누를지 말지 결정합니다.a) (인덱스 - 1)에 위치한 전구의 상태와 만들고자하는 배열의 (인덱스 - 1)에 위치한 전..

알고리즘/BOJ 2018.11.01

백준 2840번 행운의 바퀴

문제 링크입니다: https://www.acmicpc.net/problem/2840 COCI B번 문제 명성답게 예외처리가 까다로운 문제였습니다.대표적인 모순은 아래와 같이 두 가지입니다.1. 해당 인덱스에 '?'가 아닌 문자가 저장되어있는데 또 다른 문자가 저장된다고 하는 경우2. 룰렛에 중복이 되는 문자가 있으면 안되는데 중복이 발생하는 경우('?' 제외) 2가지 예외처리를 잘 처리하고 인덱스를 모듈러를 통해 시계방향으로 잘 전환하였다면 AC를 받을 수 있는 문제였습니다. #include #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); int N, K; cin >> N >> ..

알고리즘/BOJ 2018.10.29

백준 2852번 NBA 농구

문제 링크입니다: https://www.acmicpc.net/problem/2852 생각보다 까다로운 문제였습니다. 알고리즘은 아래와 같습니다. 1. 한 팀이 이기기 시작하는 시간을 start에 저장합니다. 2. 비기는 순간 해당 팀이 이기고 있었던 시간을 계산해서 더해줍니다. 3. 마지막에 한 팀이 이기고 있었을 경우 48분에서 start를 뺀 시간만큼 이기고 있었던 팀에 더해줍니다. 4. string 형식으로 출력해야지만 AC를 맞는 것 같습니다.(숫자를 integer 형식으로 제출하면 WA가 뜨는데 이유가 궁금하네요) 주의할 점은, 초의 범위는 0 이상 59 이하라는 것입니다. 해당 범위를 초과할 경우 1분을 더해주고 60초를 빼주고, 해당 범위보다 미만이라면 1분을 빼주고 60초를 더해줘야합니다...

알고리즘/BOJ 2018.09.24

백준 1713번 후보 추천하기

문제 링크입니다: https://www.acmicpc.net/problem/1713 문제의 조건을 잘 읽고 그대로 코딩하면 되는 문제였습니다.조건이 5개나 되기 때문에 꼼꼼하게 잘 읽어보시는 것을 추천드리고 vector와 pair를 연습하기 좋은 문제였던 것 같습니다. #include #include #include using namespace std; const int MAX = 100 + 1; int recommend[MAX]; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); int N; cin >> N; //{시간, 사진} vector v(N, { 0, 0 }); int rec; cin >> rec; for (int i = 0; i < rec..

알고리즘/BOJ 2018.09.24

백준 5919번 Hay Bales

문제 링크입니다: https://www.acmicpc.net/problem/5919 간단하게 해석하자면 모든 건초더미들의 높이가 같게 하려면 건초더미들을 몇번 움직여야하는지 구하는 문제였습니다. 알고리즘은 아래와 같습니다.1. 우선 건초더미들의 개수 평균을 구합니다.2. 결국 평균보다 높이 쌓여있는 건초더미들에서 낮은 건초더미들로 옮겨야하므로 평균보다 얼마나 높은지의 누적합을 구하면 됩니다. #include using namespace std; const int MAX = 10000; int N; int hay[MAX]; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); //cin 실행속도 향상 cin >> N; int sum = 0; for (in..

알고리즘/BOJ 2018.08.28

백준 14210번 Kartomat

문제 링크입니다: https://www.acmicpc.net/problem/14210 문자열 탐색 및 구현 문제였습니다.14209번과 마찬가지로 꽤나 쉬운 문제였습니다. #include #include #include using namespace std; string keyboard[4] = { "***ABCDE", "FGHIJKLM", "NOPQRSTU", "VWXYZ***" }; string destination[50]; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); int N; cin >> N; for (int i = 0; i > destination[i]; string input; cin >> input; vec..

알고리즘/BOJ 2018.08.19