
경희대학교 알고리즘 동아리 KHUA에서 주최한 KHSPC 2026 오픈콘테스트에 참여했습니다. 2026 SCSC 프로그래밍 경시대회에 이은 두번째로 참가하게된 오프라인 대회네요.
오전 9시 40분까지 입실해야하는 이른 대회라 참여를 고민했는데 문제셋 난이도가 괜찮아보여서(브론즈~플레티넘) 참가하게 되었습니다.
대회 시작 전 안내받은 교내 와이파이로 대회 사이트에 접속하려 했더니 오픈콘 참여자들은 접속이 안되는 상황이 발생했습니다. 다들 "왜 안되지?" 하던 분위기였는데 코이님이 핫스팟을 열어주셔서 무사히 대회가 시작됐습니다. 덕분에 큰 혼란 없이 진행됐네요.

A번 - MBTI 1 (0:03 AC)
간단하게 반대되는 성향을 분기하여 출력하면 되는 문제였습니다.
def main():
input=open(0).readline
s=input()
print("EI"[s[0]=='E']+"SN"[s[1]=='S']+"TF"[s[2]=='T']+"PJ"[s[3]=='P'])
main()
B번 - 도서관 예약하기 (0:13 AC)
모든 예약 시간의 시작시각또는 끝시각이 1~12에 속한다면 check the time again을 출력하고 아니다면 KHU Library를 출력하면 되는 문제였습니다. 하지만 문제풀때는 더 간단하게 생각을 못했어서 시간이 60분~779분 인것으로 조건 분기를 했었습니다.
def main():
input=open(0).readline
for _ in range(int(input())):
s=input().strip()
for cc in s.split(' - '):
h,m=map(int,cc.split(':'))
if 60<=h*60+m<=779:
pass
else:
return print("KHU Library")
print("check the time again")
main()
C번 - MBTI 2 (0:18 AC)
입력된 GMBTI 16개 문자열으로 반대되는 성향을 알아낸후 쿠옹이의 GMBTI와 반대되게하여 출력하면 되는 문제였습니다.
def main():
input=open(0).readline
gs=input().split()
t=[[],[],[],[]]
s=input()
for p in gs:
for i in range(4):
if p[i] not in t[i]: t[i].append(p[i])
print(''.join(t[i][t[i][0]==s[i]] for i in range(4)))
main()
D번 - A+B (0:26, 1:52, 2:10, 2:41, 2:51 WA)
concat(A, B)는 A와 B를 순서대로 이어 쓴 정수일때 자연수 N이 주어지면 A+B=N인 정수 A,B에 대하여 concat(A, B)의 값을 최대화하는 A와 B를 각각 구하는 문제였는데 B가 10^k인 꼴인것을 알아냈습니다. 하지만 k= (N의 자리수)-1, (N의 자리수)-2인것만 될수 있다는 잘못된(...) 가정을 품고 반례를 찾아내지 못하여 결국 맞추지 못했습니다, N<=10^9이기 때문에 k를 0~9 까지에 대해서 다 고려해주면 답이 나온다는 해설을 듣고 상당히 아쉬웠던 문제였습니다.
E번 - 버프 중첩 (0:43, 0:46, 0:48, 0:50, 0:54 WA, 1:00 AC)
초기 공격력이 0이상일때와 0미만일때를 나눠서 생각헸어야 했습니다.
만약 0이상이라면 +버프를 먼저 사용해준후, 0이 아닌 *버프를 사용하여 공격력을 최대화 할 수 있습니다.
0미만일땐 *0 버프의 유무에 따라 조건이 달랐습니다. 만약 *0버프가 있다면 *0을 먼저하여 공격력을 0으로 초기화 시킨후 0이상때 처럼 +버프 적용후 0이 아닌 *버프를 사용하면 되고
*0 버프가 없을때에는 +버프로 0이상을 만들 수 있다면 추가적으로 *버프를 적용하여 공격력을 최대화 하면 됩니다.
각각의 케이스에 대하여 한번씩 놓쳐서 5WA를 만들어냈습니다. (ㅎㅎ;)
def main():
input=open(0).readline
n,x=map(int,input().split())
mul=[]
ex0=False
s=0
for _ in range(n):
c,d=input().split()
d=int(d)
if c=='+':s+=d
else:
if d==0:
ex0=True
else:
mul.append(d)
if x>0:
x+=s
for k in mul:x*=k
else:
if ex0:
x=s
for k in mul:x*=k
else:
x+=s
if x>0:
for k in mul:x*=k
print(x)
main()
F번 - 골프 연습 (1:28 TLE)
이전에 비슷한 문제 룩의 이동을 풀었어서 한칸에 최대 4번(방향 좌우앞뒤)만 방문하게 최적화 해준다면 O(NM)으로 풀린다는 점을 알고 있었지만 구현이 정확하게 기억이 안나서 풀지 못하였습니다.
다시 구현을 살펴보니 같은 방향으로 갈때는 간선을 0으로 하고 꺾는다면 (ex. 동쪽으로 가려다가 남쪽으로 꺾음) 간선을 1로 하게 그래프를 모델링하여 방문배열을 3차원으로 확장하여 0-1bfs또는 다익(0-1bfs는 다익으로 환원가능하므로)으로 풀 수 있었습니다.
정말 아쉽긴 하지만 다음에 비슷한 문제를 만난다면 진짜 맞출 수 있게 되겠죠..
후기 & 느낀점

4솔을 했습니다. 고수들이 많았던? 오픈콘이라 그런지 오신분 11명중 10등이네요. 아쉬운 결과이긴 하지만 오프라인으로 다른 분들 키보드 두드리며 집중하는 분위기 자체는 좋았습니다. 사실 본대회 전날 예비소집때 간단한 bfs문제를 못푼거 보고 이거 잘못되었다고 생각이 들긴했지만요.
문제 난이도도 적절했던 것같고 재밌었습니다.
대회를 주최해주신 운영진, 검수진분들께 감사하고 다음에 또 기회가 된다면 더 나은 모습으로 참가하고 싶네요. 그때까지 앳코더에서 버츄얼 열심히 돌아야겠습니다.
글 읽어 주셔서 감사합니다.
'프로그래밍 > 문제 풀기' 카테고리의 다른 글
| [DOJ] Beginner Contest DOJ 1 버츄얼 후기 (0) | 2026.06.05 |
|---|---|
| [대회] 첫 오프라인 대회 2026 SCSC 프로그래밍 경시대회 후기 (0) | 2026.05.17 |
| GoodBye BOJ! (1) | 2026.04.15 |
| [백준] 두 번째 백준 오픈콘테스트 도전기 (0) | 2025.10.03 |
| [백준] 처음으로 제대로 된 오픈콘테스트 도전기 (0) | 2025.09.02 |