[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제

1,414 views

Published on

숭실대학교 알고리즘 동아리 SCCC 주최의 교내 프로그래밍 경시대회 문제 입니다.

Published in: Engineering
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,414
On SlideShare
0
From Embeds
0
Number of Embeds
1,336
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제

  1. 1. 161125. 간절히 원하면 온 SCCC가 도와준다 1. 숭실대 입구역 등반 숭실대 입구역은 지하 7층이라는 아름다운 깊이를 자랑한다. 불행히도 컴퓨터학부와 소프트웨어 학부가 수업을 듣는 정보과학관은 숭실대학교 언덕 꼭대기에 있다. 통학생 건환이는 프로그래밍 실습을 위해 매주 수요일 10시 30분까지 정보과학관까지 등반을 해야 한다. 하지만 일찍 일어나 는 재주가 없는 건환이는 매주 수요일 수업 직전에 간신히 숭실대 입구역에 도착을 한다. 하지만 지각은 할 배짱이 없다. 그래서 매주 수요일 아침, 건환이는 뛰어갈지 걸어갈지 고민을 한다. 당 신은 건환이에게 프로그램을 작성해서 고민에 대해 답을 주기로 했다. 입력 첫 째 줄에, 건환이가 숭실대 입구역에 도착하는 시간 H(0<=H<=24)와 분 M(0<=M<=60)이 입 력으로 주어진다. 두 번 째 줄에 건환이가 정보과학관까지 뛰어가는데 걸리는 시간(분) R(0<=R<=W<=360)과 걸어가는데 걸리는 시간 W가 주어진다. 건환이는 수업에 가다가 쓰리팝에 들릴 수도 있으므로 올라오는 데 시간이 오래 걸릴 수도 있다. 출력 건환이가 뛰어야 한다면 “Run”을 출력한다. 건환이는 느긋한 성격이기 때문에 10시 30분까지 딱 맞춰서 갈 수 있어도 걸어간다. 만약, 걸어가도 괜찮다면 “Walk”를 출력한다. 어떻게 해도 지각이 라면, “망했어”를 출력한다. Input1 10 15 5 10 Output1 Walk Input2 10 29 4 8 Output2 망했어
  2. 2. 161125. 간절히 원하면 온 SCCC가 도와준다 2. 넌 강해졌다! 걸어가!(power) 오버워치를 즐겨하는 SCCC에 기석이는 아나충, 영선이는 라인하르트충이다. 아나충인 기석이는 라인하르트만 하는 영선이에게 궁극기를 주는 것을 정말로 좋아한다. 왜냐하면 궁극기를 받은 영 선이가 흥분을 하여 이동속도가 빨라진 라인하르트를 들고 망치를 휘두르며 적들을 향해 돌진을 해서 적들을 잡는 영선이의 모습이 재미있기 때문이다. 하지만 11월 16일 오버워치 패치에 아나 궁극기에 이동속도 증가버프가 사라지게 되었다. 이에 실망한 기석이는 궁극기를 막 쓰는 것이 아니라, 실력이 부족한 영선이가 좀 더 많은 적들을 잡을 수 있도록 효율적으로 쓰고 싶다. 적들 6명의 상태가 주어졌을 때 몇 초 뒤에 궁극기를 사용하는 것이 가장 많은 적들을 잡을 수 있는지 궁금하다. 몇 초 뒤에 궁극기를 시전하는 것이 가장 효율적인지 구하여라. 0 1 2 3 4 5 6 Nein(라인하르트) 40 100 70 60 30 60 적은 1번째 칸부터 6번째 칸까지 6명이 일렬로 서 있다. 라인하르트는 0번째 칸에서부터 1초에 한 칸을 움직이며 망치를 한번 휘두를 수 있다. 영선이의 라인하르트는 후퇴를 모르는 상남자이 기 때문에 항상 전진만 한다고 가정한다. 궁극기를 받기 전 망치의 데미지는 50, 궁극기를 받은 후의 데미지는 70이라고 가정한다. 아나 궁극기는 3초간 지속된다고 가정한다. 아나의 궁극기를 3초에 맞는다고 하면 맞자마자 데미지가 상승해 3초부터 5초까지 지속된다. 입력 적들의 체력이 0<x<=100사이의 정수로 6개가 주어진다. 출력 아나가 몇 초에 궁극기를 시전하는 것이 좋은지, 그 때 궁극기를 시전하였을 때 적을 총 몇 명 죽일 수 있는지(궁극기를 맞지 않았을 때 죽인 적도 포함한다) 공백으로 구분하여 출력한다. 죽일 수 있는 적의 수가 같을 경우가 여러 가지일 경우에는 빨리 궁극기를 사용하는 것을 정답으로 한 다. input 40 100 70 60 30 60 output 2 4 해설 2초에 시전하였을 때 3초에 시전하였을 때 4초에 시전하였을때 모두 4명을 죽일수 있다. 하지만 빨리 궁극기를 사용하는 것을 정답으로 하므로, 2초를 출력해야한다.
  3. 3. 161125. 간절히 원하면 온 SCCC 가 도와준다 3. 날로먹는(?)컴수과제(Comsu) 어느 날 컴퓨터수학 과목 과제가 나왔다. 과제의 내용은 주어진 그래프의 가능한 경로 개수를 구해 출력하는 프로그램을 작성하는 것이다. 민후는 이 과제를 어떻게 해결할까 교재를 뒤적이다 경로의 개수를 찾는 방법을 책에서 읽게 되었다. 그 방법대로 코딩을 하고 과제를 제출하기 전 예제로 나온 그래프를 입력한 순간, 민후는 컴퓨터의 멱살을 잡고 싶어졌다. 출력된 값이 경로의 개수로 결코 나올 수 없는 음수가 나온 것이다. 다시 코드와 예제를 유심히 살펴본 민후는 코드에는 문제가 없으나 문제의 정답이 int 로 설정한 변수 저장범위를 넘는다는 사실을 알아냈다. 자료형을 바꿔서 다시 코딩하는 것은 시간이 오래 걸리고 민후는 과제를 하기 전 시작했던 문명 5 를 끝내야 하기 때문에 다시 코딩하기는 싫다. 그래서 민후는 C 잘알인 당신에게 이 문제를 해결해 달라고 했다. 입력 민후가 만든 프로그램의 잘못된 출력값이 첫 번째 줄에 주어진다. 출력 민후가 의도했던 답을 출력한다. (정답의 크기는 2^32-1 를 넘지 않는다.) Input -2072745075 Output 2222222221 힌트 예제의 경우, 2222222221 은 이진수로 1000 0100 0111 0100 0110 1011 1000 1101 이므로, 모두 32 개의 비트가 수를 표현하기 위해 필요하다. 하지만 통상적인 4 바이트 정수는 앞의 첫 번째 비트를 부호 표현하는데 사용하고, 나머지 31 개의 비트를 수 표현하는데 사용하므로 민환이의 프로그램에서는 -2072745075 라는 값이 나왔다. + 실제로 저런 과제가 나오진 않는다. 아마도....
  4. 4. 161125. 간절히 원하면 온 SCCC가 도와준다 K번째 큰 원소 집합은 서로 구별되는 대상들을 순서와 무관하게 모은 것이다. 이때 집합에 속하는 각각의 대상들은 집합의 원소라고 한다. 세상에 존재하는 거의 모든 것들은 집합의 원소가 될 수 있으며, 이는 숫자나 대수, 사람, 글자, 집합, 국가와 같은 개념들을 포함한다. 집합은 일반적으로 알파벳의 대문자로 표기하고, 원소는 소문자로 표기한다. 공리적 집합론에서는 집합을 무정의 용어로 두거나 단순히 집합을 구별하는 단항 조건 기호를 사용하기도 한다. 이 경우, 집합 자체의 정의를 시도하기 보다는 전체 집합론이 가지고 있는 공리들이 집합의 성질을 설명한다. 예를 들어, 확장 공리는 원소가 같은 두 집합은 같아야 한다는 뜻을 지닌다. - 출처 : wiki 백과 – 공집합이 하나 주어진다. 이 집합에 원소를 추가할 수 있고, 그 원소들 중 k번째로 큰 원소를 찾 을 것이다. 입력으로 주어지는 질의의 종류는 다음과 같다. 1. 1 k : 집합에 k라는 원소를 추가한다. (1 <= k <= 100) 2. 2 k : 집합에 k번째로 큰 원소를 출력한다. 공집합에서 다음과 같은 질의가 주어졌을 때, 2번 질의에서 원소를 출력하는 프로그램을 작성하시 오. 입력 첫줄에 질의의 개수 Q가 주어진다.(2 <= Q <= 100) 다음 Q줄에는 a k가 주어지는데, a가 1일때는 k를 집합에 추가하고, a가 2일때는 k번째 큰 원소를 출력하라. a가 2일때는 집합의 원소보다 큰 k가 들어오지 않음을 보장하고, a가 1일 때 이미 집합 에 있는 원소가 들어오면 무시된다. a가 2인 질의는 한번 이상 입력됨이 보장된다. 출력 질의의 종류가 2일 때, k번째 큰 원소를 출력한다.
  5. 5. 161125. 간절히 원하면 온 SCCC가 도와준다 Input1 5 1 5 2 1 1 3 2 2 2 1 Output1 5 3 5 Input2 8 1 7 1 5 1 3 2 1 2 2 2 3 1 5 2 3 Output2 7 5 3 3
  6. 6. 161125. 간절히 원하면 온 SCCC가 도와준다 5. 성우의 과제 제출(Assignment) 성우는 이번학기에 운영체제를 수강하고 있다. 숭실대학교 운영체제 수업은 과제가 많기로 유명 하다. 운영체제 수업에서는 교수님의 기분에 따라 n(1 <= n <= 10000) 개의 과제가 나온다. 각 과제는 마감기간 d(1 <= d <= 10000)일과 과제점수 s(1 <= s <= 10000) 점이 주어진다. 과제 제 출 규칙 상 하루에 최대 과제 하나만 제출 할 수 있다. 예를 들어, 각 과제 점수s 가 10,20,30,40,50 이고, 마감일 d 가 2,1,2,1,4 이면 첫째날에는 40, 둘 째날에는 30, 셋째날에는 50 점을 받아 총 120점의 과제점수를 받을 수 있다. 학점에 목마른 성우가 과제점수를 잘 받을 수 있도록 도와주자! input 5 15 1 20 2 3 1 26 2 100 10 output 146
  7. 7. 161125. 간절히 원하면 온 SCCC가 도와준다 6. 영선이의 빵(Bread) 매일 001에서 서영선은 코딩을 하며 영준이가 사온 빵을 뺏어먹고 있었다. 그래서 서영선은 하루 가 다르게 배가 나오기 시작했다. 영선이의 배를 더 이상은 지켜보지 못하는 서영선의 룸메이트 최윤호가 그가 먹던 빵을 집어던졌다. 날아가는 빵을 보며 서영선은 매우 안타까워했다. 하지만 그때 서영선은 날아가면서 떨어진 빵조각이 정확히 정수 좌표 위에 놓여진다는 엄청난 사실을 알 아냈다. 언제나처럼 빵을 못 먹게 된 서영선은 그 빵조각이라도 먹고 싶어한다. 하지만 서영선은 날아간 빵의 충격으로 아무런 생각을 할 수 없게 되었다. 그것을 안타깝게 여긴 여러분이 서영선이 빵조 각을 총 몇 개를 먹을 수 있는지 계산해 주시오. 참고로 서영선은 좌표계로 (0,0)에 서있으며 방의 크기는 (n, n)이며 항상 빵은 1사분면 방향으로 날아간다. 예를 들면 빵이 날아간 직선의 기울기가 1이고 방의 크기가 (5, 5)라면 빵조각은 (0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5)로 총 6개가 된다. 또한 기울기는 항상 분수꼴로 주어진다. 예를 들면 기울기 가 2/3로 주어질 수 있으며, 이때 방의 크기가 (5, 4)면 (0, 0), (3, 2)로 총 2개가 된다. 입력 첫번째 줄에는 방의 넓이인 n, m이 주어진다. 두번째 줄에는 기울기인 k, l이 주어진다. 기울기는 k/l이다. 출력 영선이가 먹을 수 있는 빵조각의 갯수를 출력하시오. Input1 5 5 1 1
  8. 8. 161125. 간절히 원하면 온 SCCC가 도와준다 Output1 6 Input2 5 4 2 3 Output2 2
  9. 9. 161125. 간절히 원하면 온 SCCC가 도와준다 7. 뻥치는 간식 행사 오늘은 컴퓨터학부 기말고사 간식 행사를 하는 날이다. 숭실대학교 컴퓨터학부 학생들이 간식을 받기위해 간식 번호를 받았다.(0<= 간식 번호(num) <= 1000000000) 학생들은 간식번호에 따라 해당 간식을 받는다. 예를 들어 간식번호 0번은 밥버거이고, 100번은 무려 치킨!! 이다. 그런데, 간식 번호는 너무 다양해서, 해당 간식을 전달하느라 정신이 없다! 꾀가 난 영준이는 몇 개의 간식번호에 대해서 재고가 없다고 뻥! 치기로 했다. (그러면 덜 움직이 니까!) 예를 들어, 영준이가 “3번 간식 없어요!” 라고 소리치면, 3번 간식번호를 가진 학생들은 줄 을 이탈한다. 영준이가 M개의 간식에 대해 뻥을 치고, 학생들이 줄을 이탈한다고 할 때, 같은 간식번호를 가진, 가장 긴 연속된 학생들의 수를 구해라. (영준이가 어떤 간식에 대해 뻥을 치느냐에 따라, 길이는 달라진다. 가장 긴 경우는?) 입력 첫 번째 줄: 줄에 서있는 학생수(1<=N<=100000), 뻥을 치는 횟수(0<=M<=N) 두 번째 줄 : 각 학생의 간식번호(1<=s(i)<=N)가 주어진다. 출력 같은 간식번호를 가진, 가장 긴 연속된 학생들의 수 예제 입력 9 1 2 7 3 7 7 3 7 5 7 예제 출력 4 예시 만약 영준이가 “3번 간식 없어요!” 라고 했다면 [2 7 3 7 7 3 7 5 7] -> [2 7 7 7 7 5 7] // 가장 긴 길이는 4 만약 영준 “7번 간식 없어요!”라고 했다면, [2 7 3 7 7 3 7 5 7] -> [2 3 3 5] // 가장 긴 길이는 2 가능 한 가장 긴 경우를 출력해야 한다. 그래서 답은 4 이다.

×