3번째로 나가는 대회였다.
첫 번째는 SUAPC 21 Summer , 두 번째는 홍익대 프로그래밍 경진대회..
뭐 풀 실력이 있건 없건 간에 시간 안에 full로 집중하자가 나의 목표이다.
암튼 코린이가 열심히 풀어본 캠프 콘테스트 후기도 신선할 것 같으니 많이 봐줬으면 한다.
3 sol을 했다.
엄청 아쉬운 성적은 아니었고, 만족스러운 성적도 아니었다.
다음번에는 더 잘 하자!
지난 홍프경때도 후기를 작성해보려 했는데 귀찮아서 skip 해버린 탓에 첫 대회 후기가 되어버렸다.
이번에는 꼭..! 후기를 끝마쳐보려 한다. (성공!)
A. 시간복잡도를 배운 도도 (브론즈 2) 00: 04: 46 AC
문제를 읽자마자 python의 count를 써야겠다는 생각이 들어서 메모 없이 바로 코드를 작성했다.
맨 위 세번째 있는 코드는 사실 이 풀이에서는 필요 없는 default 코드라 못 본척해줘야 한다.
풀이는 정말 단순하게 for 반복문을 돌리면서 문장 안에 들어있는 for와 while의 개수를 더해준 후 max 값으로 정답을 업데이트시켜준 후 출력해주면 된다.
이 문제의 퍼솔은 나였다..!
문제를 제출하고 엄청 느린 파이썬의 제출현황에서 숫자가 올라가는 것을 기다리다가 맞았습니다를 본 이후에 스코어보드를 보러 갔는데 한 분이 1번 문제가 맞아있길래 퍼솔이 아닌 줄 알았다. 그런데 스트리밍 때 퍼솔로 아이디를 불러주셨다!
짱 뿌듯~ㅎㅎㅋ (너무 단순한가)

import sys
input = sys.stdin.readline
pair = lambda : map(int, input().split())
c = int(input())
maxc = 0
for i in range(c):
cnt = 0
tmp = input()
cnt += tmp.count('for') + tmp.count('while')
maxc = max(maxc,cnt)
print(maxc)
B. 상품의 주인은? (실버 5) 00: 19: 26 RE 00: 25: 05 AC
이 문제는 이해하느라 좀 끄적여본 것 같다
세 줄 이상의 문장은 잘 안 읽는 편이라 독해하는데 시간을 단축하려면 적어가면서 읽어야 한다.
암튼 저렇게 끄적이고 어떻게 풀어야할지 감이 왔었다.
번호대로 정렬을 하고 (그림에서 2번 조건 만족 ) A, B, C, D의 최고점을 기록해 준 후 그 반복문 안에서 최고점이 학생을 뽑아낸 후 삭제해주면 중복될 일이 없어지게 된다 (그림에서 1번 조건 만족) 그래서 테스트 케이스만 통과시킨 후 바로 코드를 제출했다.
import sys
input = sys.stdin.readline
pair = lambda : map(int, input().split())
n = int(input())
memo = list()
for i in range(n):
memo.append(list(pair()))
memo.sort(key = lambda x: x[0]) #번호대로 정렬
for i in range(1,5):
maxg = 0
for a in memo:
if maxg<a[i]:
grst = a[0]
maxg = max(a[i],maxg)
deit = a
print(grst,end = ' ')
memo.remove(deit)
음. 런타임에러가 떴다. 한 5분가량 뭐가 잘못되었는지 생각한 끝에 최대 점수가 0점 일 수도 있는 경우를 고려하지 못했다는 것을 깨달았고 바로 defaultmax값을 -1 로 바꿔준 후 제출해였다.
import sys
input = sys.stdin.readline
pair = lambda : map(int, input().split())
n = int(input())
memo = list()
for i in range(n):
memo.append(list(pair()))
memo.sort(key = lambda x: x[0]) #번호대로 정렬
for i in range(1,5):
maxg = -1
for a in memo:
if maxg<a[i]:
grst = a[0]
maxg = max(a[i],maxg)
deit = a
print(grst,end = ' ')
memo.remove(deit)
다행히도 맞았습니다가 떴다.
C. queuestack (실버 3) 00: 58: 11 TLE , 01: 38: 25 TLE , 02: 19: 38 AC
솔직히 말하면 나는 시간복잡도를 계산하지 못한다. 아니 사실 대충 할 수 있는데 계산을 안 하고 문제에 덤빈다.
그래서 O(NM) 이 틀린 풀이라고 생각하지 못한 채 처음 코드를 작성하였다 .
import imp
import sys
input = sys.stdin.readline
from collections import deque
pair = lambda : map(int, input().split())
n = int(input())
stat = list(pair()) #구조들의 특징
aya = list(pair()) #구조 속에 담겨있는 것들
sv = [0] * n
for i in range(n):
sv[i]= deque([aya[i]])
#sv라는 리스트 안에 deque가 하나씩 있는 구조
m = int(input())
inpsv = list(pair())
for a in range(m):
inp = inpsv[a]
for d in range(n):
sv[d].append(inp)
if stat[d]==0:
inp = sv[d].popleft()
else:
inp = sv[d].pop()
print(inp, end = ' ')
뭐 당연하다. 시간 초과가 떴는데 아무리 봐도 내가 풀 수 있는 가능성이 높아 보이는 문제는 이 문제밖에 없어서 그냥 계속 덤볐다.
혹시 몰라서 pypy로도 제출해봤는데 마찬가지였다. 그래서 음.. F번으로 넘어갔다.
python으로 진법 표현하는 것을 구글링 하다가 사람들이 C번을 많이 맞는 모습을 보고 나도 할 수 있지 않을까라는 의지를 다잡았다.
새로운 문제를 담갔다가 빼내진 신선한 뇌 상태에다가 C번을 적셨다.
그러니까 스택은 볼 필요가 없다는 풀이와 큐를 합쳐버리자는 풀이가 술술 나왔다.
역시 뇌는 refresh가 필요하다. 짱!
import sys
input = sys.stdin.readline
from collections import deque
pair = lambda : map(int, input().split())
n = int(input())
stat = list(pair()) #구조들의 특징
aya = list(pair()) #구조 속에 담겨있는 것들
sv = deque()
for i in range(n):
if stat[i]==0:
sv.append(aya[i])
m = int(input())
inpsv = list(pair())
for a in range(m):
sv.appendleft(inpsv[a])
ans = sv.pop()
print(ans, end = ' ')
솔직히 C번을 풀고 나서 여기까지가 내 한계인가 싶었다.
대회는 1시간 정도 남아있었고 D번을 풀기에는 정점과 간선이라는 말이 많이 들어본 외계어 같았다.
물론 초급 캠프 때 계속 들어온 용어였고 문제들이었지만 내가 직접 구현할 수 있을까?라는 생각이 들었다.
그리고 사람들이 D번은 건너뛰고 E번을 많이 도전하고 있길래 나도 그 유행에 합류했다. ㅎㅎ
E. 좀비 바이러스 03: 59: 13 CE
남은 1시간 안에 이 문제를 못 풀지언정 1시간 동안 딴짓을 하지 않겠다는 각오로 열심히 코드를 짰지만..
테스트 케이스도 통과하지 못한 내 코드는 나의 오기에 제출을 해버리고 컴파일 에러를 맞게 된다. ㅋㅋㅋㅋ
import sys
from collections import Counter
input = sys.stdin.readline
pair = lambda : map(int, input().split())
n,m = pair()
lst = [[0]*m for _ in range(n)]
for i in range(n):
tmplst = list(pair())
for a in range(len(tmplst)):
lst[i][a] = tmplst[a]
dx = [-1,1,0,0]
dy = [0,0,-1,1]
flag = 1
while flag !=0 :
curlst = list()
curlstx = list()
curlsty = list()
for i in range(n):
for j in range(m):
if (lst[i][j]==1) and ([i,j] not in curlst):
for d in range(4):
if (i+dx[d]>=0) and (j+dy[d]>=0) and (i+dx[d] < n) and (j+dy[d] <m):
if lst[i+dx[d]][j+dy[d]] ==0:
lst[i+dx[d]][j+dy[d]] += 1
curlst.append([i+dx[d],j+dy[d]])
curlstx.append(i+dx[d])
curlsty.append(j+dy[d])
elif (lst[i][j] == 2) and ([i,j] not in curlst):
for d in range(4):
if (i+dx[d]>=0) and (j+dy[d]>=0) and (i+dx[d] < n) and (j+dy[d] <m):
if lst[i+dx[d]][j+dy[d]] ==0:
lst[i+dx[d]][j+dy[d]] += 2
curlstx.append([i+dx[d],j+dy[d]])
curlstx.append(i+dx[d])
curlsty.append(j+dy[d])
flag = 0
for i in range(n):
for j in range(m):
if lst[i][j]==0:
flag += 1
result = Counter(curlstx)
for key, value in result.items():
if value >= 2:
resultt = Counter(curlsty)
for k, v in resultt.items():
if v >= 2:
lst[key][k]==3
a,b,c=0,0,0
for i in range(n):
a+=lst[a].count(1)
b+=lst[a].count(2)
c+=lst[a].count(3)
print(a,b,c)
심지어 밑에 counter부분은 해결하려다가 1분 정도 남았길래 제대로 작동도 안 될 것으로 예상된다. 아마 저거 때문에 컴파일 에러가 난 듯.. 이번 주 안에는 꼭.. 업솔빙 하는 걸로 하겠다....
암튼 결과는 8등을 했다.
소감은 재미있었다. 남들과의 경쟁은 참 재미있다.
동기들이랑 같이 대회에 참여하니까 더 재미있었다.
다음번에는 실수를 조금 더 줄여보고 간선, 정점 문제도 잘 풀 수 있는 수준이 되었으면 한다.
사실 나는 특별상을 노렸는데 실패했다 ^!^ 아쉽
다음 캠프때도.. 강의도 열심히 듣고 풀고 대회도 참여할 거다 . 신촌 캠프 짱~~
'후기 > 대회' 카테고리의 다른 글
2022 Winter SUAPC 후기 (10) | 2022.03.13 |
---|