250x250
두번째하늘
두하
두번째하늘
전체 방문자
오늘
어제
  • 분류 전체보기
    • 한달 기록
    • 매일 기록
    • 정보, 공유
    • 맛집
    • 후기
      • 대회
      • 기타
    • Flutter
    • Visual Studio Code
    • 프로그래밍 언어
    • 인공지능
    • PS
      • BOJ
      • CP

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Webex 화면 공유 오류
  • Visual code debug console open
  • onPressed
  • UserAccountsDrawerHeader
  • leading
  • actions
  • 무야홍
  • Drawer
  • Webex 화면 공유 mac
  • onDetailPressed
  • 첫 글
  • box decoration
  • debug console창 열기
  • Webex 화면 공유 안됨
  • Visual code debug console
  • Flutter
  • EdgeInsets
  • AppBar
  • Mac Webex 화면 공유
  • debug console open
  • Webex 화면 공유

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
두번째하늘

두하

2022 ICPC Sinchon Winter Algorithm Camp Contest - 초급
후기/대회

2022 ICPC Sinchon Winter Algorithm Camp Contest - 초급

2022. 2. 21. 01:12
728x90

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등을 했다.


 

소감은 재미있었다. 남들과의 경쟁은 참 재미있다.

동기들이랑 같이 대회에 참여하니까 더 재미있었다. 

다음번에는 실수를 조금 더 줄여보고 간선, 정점 문제도 잘 풀 수 있는 수준이 되었으면 한다.

사실 나는 특별상을 노렸는데 실패했다 ^!^ 아쉽

 

다음 캠프때도.. 강의도 열심히 듣고 풀고 대회도 참여할 거다 . 신촌 캠프 짱~~

728x90

'후기 > 대회' 카테고리의 다른 글

2022 Winter SUAPC 후기  (10) 2022.03.13
    '후기/대회' 카테고리의 다른 글
    • 2022 Winter SUAPC 후기
    두번째하늘
    두번째하늘
    metaverse. 일상이야기 쓰고 공부 좀 하려고 만든 두번째 하늘.

    티스토리툴바