목록c++ (82)
DY의 세상구경
보통 C, C++에서 입력 출력을 받을 때 printf, scanf보다 cout, cin이 편하기 때문에(개인적으로 그럴지도...) 처음에는 cout, cin을 사용하였으나 printf, scanf에 비해 cout, cin(endl)은 상당히 느리다. 이와 같은 현상에도 불구하고 cin, cout을 사용하고 싶다면std::ios::sync_with_stdio(false)를 코드 초반부에 적어준 후에 cin, cout을 사용한다면 printf, scanf만큼 빠른 사용이 가능해진다. cin, cout이 C 라이브러리에서 stdio buffer와 싱크를 맞추다 보니 느려진다고 한다.특히 endl같은 경우 위의 싱크와 상관없이 느린 출력의 주범이 된다고 하여 요즘에는 주로 printf, scanf를 사용한다.
JAVA, C, C++ 공통 대단한 알고리즘 노하우나 팁은 아니지만 실수를 방지할 수 있고 약간의 팁이라고 할 수 있어서 하나씩 정리.. 보통 알고리즘 문제에서는 배열을 사용하기 마련이다. 알고리즘 문제를 풀 때 만약 입력값이 2000개 들어온다고 하면 int a[2000] 이런식으로 잡는데 사실 문제는 없지만 보통은 1부터 2000까지가 0부터 1999까지보다 편하게 느껴질 것이다. 때문에 보통은 2000개 들어온다고 한다면 int a[2001] 이런식으로 잡거나 사실 메모리 조금 더 쓰는것이 문제가 틀리는 것 보다 낫다고 생각하기 때문에 보통 int a[2222] 등 넉넉하게 잡는다. 이렇게 잡으면 for loop를 돌 때기존에 for(int i = 0; i < 2000; ++i) 등으로 사용하던 것..
2101 : 연속부분최대곱제한시간: 1000 ms 메모리제한: 32 MB 해결횟수: 740 회 시도횟수: 2489 회 N개의 양의 실수가 있을 때, 한 개 이상의 연속된 수들의 곱이 최대가 되는 부분을 찾아, 그 곱을 출력하는 프로그램을 작성하시오. 예를 들어 아래와 같이 8개의 양의 실수가 주어진다면, 색칠된 부분의 곱이 최대가 되며, 그 값은 1.638이다.결과는 double형의 범위를 넘지 않는다. 첫째 줄은 나열된 양의 실수들의 개수 N이 주어지고, 그 다음 줄부터 N개의 수가 한 줄에 하나씩 들어 있다. N은 10,000 이하의 자연수이다. 계산된 최대값을 소수점 이하 넷째 자리에서 반올림하여 소수점 이하 셋째 자리까지 출력한다. [Copy] 8 1.1 0.7 1.3 0.9 1.4 0.8 0.7..
시간 제한메모리 제한제출 횟수정답 횟수 (비율)정답자 수1.5 초512 MB107364 (6%)38문제납세의 의무는 국민의 기본적인 의무이다. 세금은 수입에 비례하여 정해진 규칙에 따라 계산되기 때문에, 규칙에 따라서 정확한 수입을 계산하는 것이 중요하다. 여러분은 새로 가게를 열고, 총 N 일 동안 영업을 하였다. 납세의 의무를 성실하게 수행하기 위하여 매 영업일마다 손익(이익 또는 손해)을 기록하여 세무서에 신고하였다. 세금을 매기는데 기준이 되는 수입은 다음 규칙에 의해서 계산된다."1일부터 N일 사이의 어떤 연속된 기간에 대하여 이 기간 동안 손익의 총합을 구한다. 단, 하루 이상의 기간만 고려한다. 다음, 전체 가능한 모든 기간에 대하여 구한 손익의 총합들 중 K번째로 큰 값이 기준이 된다. 즉..
1161 : 하노이의 탑제한시간: 1000 ms 메모리제한: 32 MB 해결횟수: 874 회 시도횟수: 1329 회 하노이의 탑에 대한 전설은 아래와 같다. 인도 베나레스에 있는 한 사원에는 세상의 중심을 나타내는 큰 돔이 있고 그 안에 세 개의 다이아몬드 기둥이 동판 위에 세워져 있다. 기둥 가운데 하나에는 신이 64개의 순금 원판을 끼워 놓았다. 가장 큰 원판이 바닥에 놓여 있고, 나머지 원판들이 점점 작아지며 꼭대기까지 쌓여 있다. 이것은 신성한 브라흐마의 탑이다. 브라흐마의 지시에 따라 승려들은 모든 원판을 다른 기둥으로 옮기기 위해 밤낮 없이 차례로 제단에 올라 규칙에 따라 원판을 하나씩 옮긴다. 이 일이 끝날 때, 탑은 무너지고 세상은 종말을 맞이하게 된다. 기둥을 1, 2, 3 번으로 하고,..
1112 : 줄자접기제한시간: 1000 ms 메모리제한: 64 MB 해결횟수: 429 회 시도횟수: 1209 회 준성이는 1㎝ 간격으로 눈금이 매겨져 있는 줄자를 가지고 있다. 그 줄자에 있는 서로 다른 눈금 6개에 한 눈금에 하나씩 점이 찍혀 있는데, 빨간 점, 파란 점, 노란 점이 각각 두 개씩 있다. 준성이는 먼저 빨간 점이 만나도록 줄자를 접었다. 그런 후 두 파란 점이 만나도록 줄자를 접고, 또 다시 두 노란 점이 만나도록 줄자를 접었다. 줄자는 투명하여 접더라도 점들을 잘 볼 수 있다. 어떤 색깔의 두 점이 만나도록 줄자를 접었을 때, 그 다음에 접으려는 색깔의 두 점이 이미 만나고 있으면, 그 두 점에 대해서는 줄자를 접지 않는다. 예를 들어 길이 10㎝ 인 줄자에 아래 그림과 같이 2㎝ 와..
2007년 성공문제집 시간 제한메모리 제한제출정답맞은 사람정답 비율2 초128 MB105304475394943.892%문제오늘은 2007년 1월 1일 월요일이다. 그렇다면 2007년 x월 y일은 무슨 요일일까? 이를 알아내는 프로그램을 작성하시오.입력첫째 줄에 빈 칸을 사이에 두고 x(1≤x≤12)와 y(1≤y≤31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.출력첫째 줄에 x월 y일이 무슨 요일인지에 따라 SUN, MON, TUE, WED, THU, FRI, SAT중 하나를 출력한다.예제 입력 복사1 1예제 출력 복사MON힌트알고리즘 분류구현 123456789101112131415161718#in..
주사위 성공문제집 시간 제한메모리 제한제출정답맞은 사람정답 비율2 초128 MB54710910022.989%문제주사위는 위와 같이 생겼다. 주사위의 여섯 면에는 숫자가 써있다. 위의 전개도를 숫자가 밖으로 나오게 접는다.A와 F에 써있는 숫자가 주어진다.지민이는 현재 동일한 주사위를 N^3개 가지고 있다. 이 주사위를 적절히 회전시키고 쌓아서, N*N*N크기의 정육면체를 만드려고 한다. 이 정육면체는 탁자위에 있으므로, 5개의 면만 보인다.N과 주사위에 써 있는 숫자가 주어질 때, 보이는 5개의 면에 써 있는 숫자의 합의 최솟값을 출력하는 프로그램을 작성하시오.입력첫째 줄에 N이 주어진다. 둘째 줄에 주사위에 써 있는 숫자가 주어진다. 위의 그림에서 A, B, C, D, E, F에 써 있는 숫자가 차례대..