4. 1. 숭실대 입구역 등반
시간을 분으로 바꿔주시면 됩니다.
if (H * 60 + M + W <= 10 * 60 + 30) puts("Walk");
else if (H * 60 + M + R <= 10 * 60 + 30)
puts("Run");
else puts(“망했어”);
코딩하기 편하게 H에 60을 곱해서 비교를 한다.
5. 2. 넌 강해졌다! 걸어가!
문제 설명과 데이터에 문제가 있어서 죄송합니다…
매 초마다 궁극기를 맞았을 때의 죽인 적의 개수를 모두 세면
됩니다. (시작하자 마자(0초) 바로 궁극기를 맞는 경우도
있어서 대회중에 문제가 되었습니다)
For문을 돌면서 그 개수 중의 최대의 개수를 찾으면 됩니다.
7. 3. 날로먹는 컴수과제
4바이트가 작다고?
그럼 더 큰 걸 쓰면 되지!
int → long long
4바이트 → 8바이트
대입연산에 유의!
int main() {
int a; long long b=0;
scanf(“%d”,&a); b|=a;
printf(“%lld”,&b); return 0;
}
앞의 부호비트도 수 표현하는데 쓰
면 안되나?
int → unsigned int
4바이트 그대로, 하지만 32개의 비
트 사용
int main() {
int a;
scanf(“%d”,&a);
printf(“%u”,&a); return 0;
}
8. 4. K번째 큰 원소 풀이
말 그대로 집합을 만들어 넣으면서 K번째 큰 원소를 for문을 이용해
찾으면 된다.
여기서 집합은 중복을 허용하지 않으니 그것을 처리해 주어야 한다
Ex) 1 2 2 3 3 5가 주어지면 집합은 1 2 3 5가 된다.
그래서 4번째 큰 숫자로 하면 1이 나와야 한다.
참고로 STL에 Set(집합)이 구현되어 있으니 그것을 쓰면 매우 편하
게 코딩 할 수 있다.
9. 5. 성우의 과제 제출
이 문제는 마감시간에 최대한 높은 점수의 과제를
제출해야 하는 문제이다. 따라서 마감시간기준 오름차순
정렬 한 후에 min heap(cost가 작은 게 루트에
오도록)에 담는다. heap size() 는 day 가 되며, heap
size 와 dead_line 이 같은 경우에는 heap top 과 현재
들어와야 하는 과제의 점수를 비교하여 들어와야 하는
과제의 점수가 크면 heap pop 후에 새로운 과제를 push
해준다.
10. 6. 영선이의 빵
문제를 해석해 보면
y = (k / l) * x(1 <= x <= n, 1 <= y <= m)
에서 격자 점을 찾는 문제이다.
격자 점은 x에서는 k의 배수만큼, y에서는 l의 배수만큼 생기니 둘 중 작은 값을 취해주면 된다.
예를 들면 기울기가 3/5 이며 방 크기가 (20, 30)이면 x는 5씩 갈 때마다 하나씩 격자 점이 생기
며, y는 3씩 갈 때마다 하나씩 격자 점이 생기니,
x에서는 4개, y에서는 10개가 생기는데 둘 중 작은 값인 4개 + (0, 0) 1개 5개가 된다.
여기서 주의할 점은 k / l이 기약분수가 아닐 수 있으니 기약분수로 나누어 주어야 한다.
만약 격자 점을 전부 세 나갈 경우 최악엔 10^18개를 샐 수 있으니 시간이 부족하게 된다.
11. 7. 뻥치는 간식 행사
이 문제에서 뻥 치는 횟수(M)에 대해 일단 분석해 보면, 학생 수 보다
간식 번호가 많으니 사실 M번의 뻥을 친다고 했지만, 학생들이 원하지
않는(예를 들면 예제에서는 4와 같은 간식) 간식을 부르면 되니 M번
이하의 거짓말을 할 때 연속된 최대의 학생들의 수를 뽑으면 된다.
그리고 이 문제를 풀기 위해선 일단 한가지 성질을 알아야 된다. 만약
어떤 특정 구간(s, e)에 답이 존재 한다고 했을 때, 이 구간에 들어가
있는 간식의 종류는 M + 1개 이하야 된다는 것이다. 그래야 만이 특정
구간에 들어가 있는 다른 여러 간식들을 제외 시킬 수 있기 때문이다.
12. 추가 문제 문의
2016회장 이성화(010-7963-6402)
2017회장 차건환(010-5037-5292)