알고리즘/백준(BOJ)

처음 이 문제를 접근했을 때는 while문으로 낮과 밤에 올라가고 내려가는 수를 계산하기로 했었다. 예시 문제에 대한 정답은 맞았으나, 시간초과라는 결과가 떠서 다른 식으로 접근해야했는데, 문제를 보면 낮과 밤에 올라가고 내려가는 것을 수식으로 결정할 수가 있다. 우선 항상 모든 방식은 A - B + A - B + A - B + ... + A - B + A 패턴으로 이어지며 무조건 A가 더해지면서 끝나게 되어있다. 막대기를 다 올라간 경우 내려올 일은 없으니까. 따라서 걸린 일 수를 x 변수로 설정하고 수식화 하면 xA - (x-1)B >= V 가 나오고 정리하면 x >= (V - B) / (A - B) 가 된다. 여기서 오른쪽 식이 딱 떨어지는 경우와 아닌 경우로 나위어서 딱 떨어질 경우 그대로 x를 ..
벌집 모양의 방들이 존재할 때 주어진 번호의 방에 들어가기 위해 몇 번 방을 지나가야하는지를 구하는 문제이다. 벌집 모양은 6각형으로 형성되어있고, 일정한 규칙을 파악하면 쉽게 풀 수 있다. 일단 동일한 횟수로 지나가야 들어갈 수 있는 방들의 집합을 구분해본다. Group 1: 1번 1번 방 / 1번 / 1개 = 6 x 0 Group 2: 2~7번 방 / 2번 / 6개 = 6 x 1 Group 3: 8~19번 방 / 3번 / 12개 = 6 x 2 Group 3: 20~37번 방 / 4번 / 18개 = 6 x 3 Group 3: 38~61번 방 / 5번 / 24개 = 6 x 4 Group 3: 62~91번 방 / 6번 / 30개 = 6 x 5 각 그룹의 개수는 6의 배수로 나뉘는 일정한 패턴을 가지고 있다..
흔한 스택 문제 #include #include #include using namespace std; int main(){ int N; cin >> N; vector s; for(int i = 0; i > temp; s.push_back(temp); } for(int i = 0; i < N; i++){ stack VPS; for(int j = 0; j < s[i].size(); j++){ if(VPS.empty() || s[i][j] == '(') VPS.push(s[i][j]); if((s[i][j] == ')') && (VPS.top() == '(')){ VPS.pop(); } } cout
영화감독 숌은 자신의 영화 제목을 666이 들어가는 숫자로 정하기로 하였는데, 문제는 666이 등장하는 N번째 영화제목은 무엇인지 맞추는 것이었다. 일단 while(true)문으로 무한 반복으로 접근하긴 했는데, 이렇게 접근해도 될지는 모르겠다.. 첫 번째 인덱스는 666부터 시작해서, 하나씩 늘려가며 "666"과 일치하는 숫자가 등장하는지 비교하였다. 만약 등장한다면 몇 번째 등장한 것인지 N과 비교하여 맞다면 무한 반복문을 멈추고 나온다. #include #include using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N; cin >> N; string subject = "66..
오뚜깅
'알고리즘/백준(BOJ)' 카테고리의 글 목록 (6 Page)