9문제(A B C D E F G I J) 맞췄습니다.
잘하시는 분들에겐 그냥 웃긴 수준일테지만, 그래도 제가 참여한 모든 대회 중에 절대적으로나 상대적으로나 순위가 제일 높아서 기분이 좋네요.
K도 확실히 풀 수 있는 문제인데, 중간에 가족들이랑 식사하고 버스타고 기차타고 하느라 시간이 없어서 그냥 못 풀었습니다.
A.
https://www.acmicpc.net/problem/25175
N명이 있을 때,어떤 사람이 숫자를 외칩니다.
그럼 그 숫자에 해당하는 사람의 번호를 출력해주면 됩니다.
k가 3보다 크면 오른쪽에 있는 거니까 오른쪽에서 찾아주고, 그것보다 작으면 왼쪽에서 찾아주면 됩니다.
오른쪽으로 돌다가 숫자가 사람수보다 커지면 1로,
왼쪽으로 돌다가 0번째 사람은 없으니까 N으로 바꿔주면 됩니다.
코드포스였으면 이런 게임을 10만번 한다고 가정해서 제 코드대로 풀면 시간초과가 나겠죠?
#include <stdio.h>
int main() {
int n,m,k;
scanf("%d %d %d", &n, &m, &k);
if(k >= 3) {
for(int i = 3; i < k; i++) {
m++;
if(m > n) {
m = 1;
}
}
}
else {
for(int i = 3; i > k; i--) {
m--;
if(m == 0) {
m = n;
}
}
}
printf("%d", m);
}
B.
https://www.acmicpc.net/problem/25176
청정수열의 개수를 구하면 됩니다.
청정수열이려면 각 정수들이 서로 붙어있어야겠죠? ex) 11223344 44332211
한 쌍의 정수를 한 묶음으로 보고, 나열하면 정답.
정답은 N!이 됩니다.
C.
https://www.acmicpc.net/problem/25177
예전 시설 - 현재 시설의 값이 가장 큰 경우를 출력하면 됩니다.
예제 2번의 경우처럼 입력을 받지 않은 경우엔 0으로 취급해주면 되겠죠?
배열 입력 후 간단한 사칙연산입니다.
D.
https://www.acmicpc.net/problem/25178
조건 1번 '단어를 재배열해 다른 단어를 만들 수 있어야 한다.' 는 알파벳의 개수를 세줘서 둘이 개수가 동일한지 확인.
조건 2번 첫 글자와 마지막 글자는 동일. s1[0], s2[0], s1[strlen(s1)], s2[strlen(s1)]가 동일한지 확인.
조건 3번 모음 제외하면 동일. 투포인터로 모음이면 넘기면서 동일한지 확인해줬습니다.
E.
https://www.acmicpc.net/problem/25179
베스킨라빈스 게임에서 준서가 무조건 이길 수 있는지 확인하는 문제입니다.
준서가 첫번째입니다.
준서 | 상대방 |
2 | 3 ~ 5 |
... | ... |
22 | 23 ~ 25 |
26 | 27 ~ 29 |
30 | 31 |
(마지막 수 - 1) % (한 턴에 부를 수 있는 수의 개수 + 1) > 한 턴에 부를 수 있는 수의 개수
or
(마지막 수 - 1) % (한 턴에 부를 수 있는 수의 개수 + 1) == 0 이라면 준서 패배
나머지는 준서 승리
F.
https://www.acmicpc.net/problem/25180
이건 솔직히 노가다로 구했습니다.
스스로 브루트포스 해서 깨달았어요
#include <stdio.h>
int main() {
int n, answer = 0;
scanf("%d", &n);
int temp;
temp = 1 + n / 9;
if(n % 9 == 0) {
temp--;
}
if(n <= 9) {
answer = 1;
}
else if(temp % 2 == 1) {
answer = temp;
}
else{
answer = temp + n % 2;
}
printf("%d", answer);
}
G.
https://www.acmicpc.net/problem/25181
길이가 N인 수열에서 무제한으로 Swap 했을 때 숫자 위치가 다른, 그러니까
1 1 2 2의 경우, 2 2 1 1처럼 옮긴 이후에 숫자가 같은 위치에 있지 않도록 하는 문제입니다.
숫자의 범위가 10만까지밖에 안되니까 10만개의 배열로 숫자를 각각 세서
똑같은 숫자의 개수 > (N / 2) 라면 만들 수 없습니다.
예를 들어 N = 5, 그 안의 정수 2가 3개라면
1 1 2 2 2
2 2 2 1 1
어떻게 움직여도 2 하나는 만나죠?
여기까지는 쉬운 생각이고 출력이 힘들어요.
N이 5000개 밖에 없으니까 똑같은 숫자를 만나면 넘기는 식으로 시간안에 잘 출력해줍시다.
I.
https://www.acmicpc.net/problem/25183
연속되는 알파벳이 5개인지 확인해주세요
J.
https://www.acmicpc.net/problem/25184
공책에 적어보면서 깨달았습니다.
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int arr[50001] = {};
int temp = (n / 2);
for(int i = 1; i <= n; i++) {
if(i + i > 5000) break;
arr[i + i] = i;
arr[i + 1 + i] = temp + i + 1; {
if(arr[i + 1] > n) {
arr[i + 1] = 0;
}
}
}
arr[1] = n / 2 + 1;
for(int i = 1; i <= n ;i++) printf("%d ", arr[i]);
}
//4 1 5 2 6 3
//4 1 5 2 6 3 7
//3 1 4 2
주석처럼 출력될 수 있게 해주세요.
K는 쉬운 구현문제라 잘 구현해주시면 됩니다. 저는 시간이 없어서 못풀었어요.
L은 문제 이해를 잘 못했습니다. 근데 예제 보니까 느낌 와서 풀었는데 틀리더라고요.
예쁜 뱃지도 받았습니다.
문제가 간결하고 재밌었던 거 같아요.
푼 문제중에 A. 두부 두부 문제가 제일 어려웠습니다.
혹시 오류 있다면 알려주세요. 감사합니다.
'백준' 카테고리의 다른 글
[C++/C언어] 백준 | 24524번 아름다운 문자열 - 반례 공유 (0) | 2022.06.05 |
---|---|
[C++/C언어] 백준 | 4344번 평균은 넘겠지 (0) | 2022.05.25 |
[C언어/C++] 15927번 회문은 회문아니야!! + 반례 모음 (0) | 2022.05.09 |
[C언어/C++] 1920번 수 찾기 + 반례 모음 (0) | 2022.05.09 |
[C언어/C++] 14370번 전화번호 수수께끼 (Large) + 반례 모음 (2) | 2022.05.08 |