틀리는 건 싫으니까 브론즈에 올인하려고 합니다.

5월 20일부터 21일까지 무려 4개의 대회에, 27일부터 28일까지 3개의 대회에 참가했습니다(1문제씩만 푼 게 '참가했다'라고 할 수 있을 지는 모르겠지만요...).

대회에디토리얼SolveRank
2023 SCON Open Contest(숭실대학교)에디토리얼1 +150197/215
2023 POSTECH Programming Contest Open에디토리얼1 +877/214
2023 인하대학교 프로그래밍 경진대회(IUPC) Open Contest에디토리얼1 +51181/402
2023 서강대학교 청정수컵 Open Contest에디토리얼3 +303132/383
2023 아주대학교 프로그래밍 경시대회 APC Open Contest에디토리얼3 +42949/278
2023 서울대학교 SCSC 프로그래밍 경시대회 Open Contest에디토리얼079/114
월간 향유회 2023. 05.-0131/147

대회 시간 동안 전부 밖에 나가 있었기 때문에, 폰코딩으로 문제를 풀 수밖에 없었습니다. IDE 그런 거 없이, 예제도 돌려보지 않고 제출했습니다. 틀렸습니다를 몇 번을 받았더라...?

28113

SCON A, AC / 4 +150

A분 뒤에 버스가 오고, B분 뒤에 지하철이 옵니다. 다만, N분 동안 지하철 승강장까지 걸어야 합니다. 그래서, 어느 쪽을 먼저 탈 수 있는지를 보면 됩니다.

그리고 에디토리얼을 보고, 문제를 다시 보고 알게 된 사실이 있습니다. N \leq B이기 때문에, N은 이 문제를 푸는 데 전혀 상관이 없습니다! AB만 비교하면 이 문제를 풀 수 있었습니다. 제 코드는 NA, B를 모두 비교했지만, 그럴 필요가 없었습니다. 문제를 잘 읽자...

저는 문제를 잘못 이해해 무려 3번의 틀렸습니다를 받았습니다. 그럴 문제가 아닌데...

28114

SCON B

첫번째 팀명은 그냥 100으로 나눈 나머지를 이어 붙이면 되고, 두번째 팀명은 솔브 수 내림차순으로 정렬한 다음 성씨의 첫 글자를 이어 붙이면 됩니다. 저는 이때 밖에 나와 있었기 때문에, 이 문제를 스킵하고 대회 종료 이후 풀었습니다.

28097

PPC A, AC / 1 +8

포닉스가 공부하는 시간의 총 합에, ( N - 1 ) \times 8을 더한 뒤, 24로 나눈 몫과 나머지를 출력하면 됩니다.

a = int(input())
b = sum(map(int, input().split()))
c = b + ((a-1)*8)
print(f'{c//24} {c%24}')

28074

IUPC A, AC / 2 +51

모비스를 찾으면 됩니다. 주어진 문자열에서 M, O, B, I, S가 모두 한 개 이상 존재하면 YES를, 그렇지 않으면 NO를 출력하면 되는 간단한 문제였는데, 제가 밖에서 폰으로 코딩을 하다가 대소문자를 잘못 쳐서... 틀렸습니다를 받았습니다. 문제를 잘 읽자 2...

28061

청정수컵 A, AC / 1 +76

각 나무에서 A - (N + 1 - i)를 구한 값의 최대값을 구하면 되는 문제입니다. for문을 돌려서 해결했습니다.

28062

청정수컵 B, AC / 2 +109

준석이가 사탕을 몇 개 가져갈지 구하면 됩니다.

사탕들의 합이 짝수라면 그냥 합을 출력하면 됩니다. 홀수라면, 1개 이상의 홀수 사탕이 반드시 존재하기 때문에, 그 사탕을 빼고 가져가면 됩니다.

28063

청정수컵 C, AC / 2 +118

와! 동전이 복사가 된다고! 저도 이런 기계가 있었으면 좋겠습니다. 500원짜리를 복사해서 오락실에 들고 가기...

상하좌우 중 한 개를 선택한다면, 그 방향으로는 다시 선택할 필요가 없습니다. 그렇기 때문에, 정답은 반드시 4 이하입니다.

  • 기계의 크기가 1이라면 동전을 복사할 필요가 없으므로 정답은 0입니다.
  • 아니고, 기계의 꼭짓점에 동전이 있다면 정답은 2입니다.
  • 아니고, 기계의 모서리에 동전이 있다면 정답은 3입니다.
  • 아니라면 정답은 4입니다.

28135

APC A, AC / 1 +77

1부터 N까지 쭉 세주면서 50이 포함되어있는지를 체크하면 됩니다. 숫자를 문자열로 바꿔서 문자열 안에 들어가 있는지를 확인했습니다.

28125

APC B, AC / 2 +125

일단 문자열을 받고, 테이블에 나와있는 대로 바꿔줍니다. 이때 \' 또는 \\'의 구별에 주의해야 합니다. 저는 그렇지 않아서 틀렸습니다를 한 번 받았습니다...

그리고 바꾼 횟수와 문자열의 길이를 비교해서 절반 이상이면 문자열을 버리고 I don't understand를 출력하면 됩니다.

28136

APC C, AC / 3 +227

1부터 N까지 보면서 다음 번 수가 작거나 같다면 원, 탁!을 수행하면 됩니다. 문제에서 오름차순이라고 말을 했길래 작은지만 검사했는데, 문제를 끝까지 읽지 않았습니다... 그리고 받은 무수한 틀렸습니다의 요청

오름차순 수열이란 뒤로 갈수록 숫자가 커지는 수열을 의미한다.

문제를 잘 읽자 3...

28086

SCSC A, RTE / 3

입력 안에 들어있는 문자열 중 / 또는 *가 있는지 검사하고, 그렇지 않으면 + 또는 -가 있는지 검사합니다. 이후, 연산자에 따라 실제로 계산을 해 보면 되는데, 파이썬은 oct, int라는 아주 좋은 도구가 있습니다. 실제로 계산한 결과를 출력하면 됩니다... 만, 어째서인지 계속 36%에서 런타임 에러가 뜹니다. 대체 왜일까요...? 파루빗토 쨩은 왜 계산하기를 거부하는 것일까요...

업데이트: 제가 작성한 코드에서, 앞자리가 음수고 연산이 뺄셈인 경우에 대한 처리를 하지 않았다는 것을 알게 되었고, 고쳤더니 맞았습니다!!를 받았습니다.

# 원래 코드

import sys
i = sys.stdin.readline().strip()

if '/' in i:
    a = i.split('/')
    if int(a[1], 8) == 0:
        print('invalid')
        exit(0)
    b = int(int(a[0], 8) // int(a[1], 8))
elif '*' in i:
    a = i.split('*')
    b = int(a[0], 8) * int(a[1], 8)
elif '+' in i:
    a = i.split('+')
    b = int(a[0], 8) + int(a[1], 8)
elif '-' in i:
    a = i.split('-')
    b = int(a[0], 8) - int(a[1], 8)

if b < 0:
    print('-' + oct(abs(b))[2:])
else:
    print(oct(b)[2:])

28138

5월 향유회 A, TLE / 2

저는 단순히 1부터 N까지 전부 돌려 보면서 m에다가 더하는 식으로 구현했는데, 1 \leq N \leq 10^{12}입니다. N이 꽤 크기 때문에 당연히 시간 초과를 받았습니다.

jh05013님의 풀이에 의하면,

N-R을 m으로 나눈 나머지가 0이어야 합니다. 즉, m은 N-R의 약수여야 합니다.

그렇다고 다 되는 건 아니고, m이 R보다 커야 합니다. 즉, N-R의 약수 중 R보다 큰 것의 개수를 세면 됩니다.

어떤 수 X의 약수는 O(\sqrt{x}) 시간에 전부 알아낼 수 있음이 알려져 있습니다. https://www.acmicpc.net/step/18

약수를 찾으면 되겠군요. 이 문제는 나중에 천천히 풀어볼까 합니다.


이렇게 7개 대회를 찍먹해 보았습니다.

BOJ Tag 플러그인

백준 온라인 저지solved.ac의 여러 정보들을 예쁘게 보여주는 워드프레스 플러그인입니다.

Github에서 보기

현재 최신 버전은 r231231a 입니다.

현재 solved.ac API 크롤링이 필요한 부분(문제 정보, 유저 정보)의 크롤링에 문제가 있어 해당 부분의 코드를 비활성화 하였습니다.

예시

설치

  1. https://github.com/sake2054/bojtag/archive/refs/heads/main.zip 다운로드
  2. 압축 풀기
  3. bojtag-main 폴더를 복사해 wp-content/plugins/ 폴더에 붙여넣기
  4. 플러그인 메뉴에서 활성화

사용

쇼트코드는 boj 입니다. 예를 들어, kimingan의 유저 티어를 보여주고 싶은 경우 [boj u="kimingan"] 을 입력하면 됩니다.

인수는 l, r, t, y, p, at, ar단 하나가 필수로 있어야 하며, s, o는 선택입니다.

BOJ 문제 스타일

  • [boj l="CODE"]
  • 영문으로 보여주고 싶은 경우 [boj l="CODE" o="en"]
  • 커스텀 문구 [boj l="CODE" s="원하는 문구"] : 스페셜 저지 아닌데요
LookCode(l="")o="en"
스페셜 저지spjSpecial Judge
점수partialPoints
전체 채점fullFull
랜덤 방지random-killerRandom
번외unofficialExtra
채점 준비 중preparingPreparing
삭제deletedDeleted
서브태스크subtaskSubtask
성공acSuccess
부분 성공pacPartial Success
wa
언어 제한language-restrictLanguage
제출 횟수 제한submit-limitSubmit
인터랙티브interactiveInteractive
함수 구현funcFunction
투 스텝two-stepsTwo Steps
클래스 구현classClass
feedback
시간 누적time-accTime Accumulation
다국어multilangMultilingual
북마크bookmarkBookmark

주의: 문제 정보를 자동으로 가져오는 것이 아닙니다. BOJ의 웹 스크래핑은 규정으로 금지되어 있으므로, 해당 규정이 수정되거나 API를 제공받지 않는 한 문제 정보를 자동으로 가져오는 기능을 추가할 계획은 없습니다.

BOJ 채점 결과

  • [boj r="CODE"]
  • 영문으로 보여주고 싶은 경우 [boj r="CODE" o="en"]

커스텀 문구를 입력하려면 [boj r="CODE" s="원하는 문구"] 를 입력합니다.
예시: 100점 과 같이 서브태스크 문제에서 점수를 표시하거나, 맞았다요~, 정답도 못 맞춘ww 와 같이 사용할 수 있습니다.

LookCode(r="")o="en"
맞았습니다!!ac, 4Accepted
맞았습니다!!pac, 15Partially Accepted
틀렸습니다wa, 6Wrong Answer
출력 형식이 잘못되었습니다pe, 5Presentation Error
시간 초과tle, 7Time Limit Exceeded
메모리 초과mle, 8Memory Limit Exceeded
출력 초과ole, 9Output Limit Exceeded
런타임 에러rte, 10Runtime Error
컴파일 에러ce, 11Compilation Error
기다리는 중wait, 0Pending
재채점을 기다리는 중[1]기록을 남기지 않는 재채점rejudge-wait, 1Pending Rejudge
채점하지 않음nojudge
채점 준비 중compile, 2Preparing for Judging
채점 중judging, 3Judging
채점 불가co, 12Unavailable
삭제된 제출del, 13Deleted
0초 후 채점 시작[2]반드시 [boj r="remain" s=""] 형식으로 사용해야 합니다.remain, 14
런타임 에러 이유를 찾는 중rtereason, 16Finding RTE reason
맞았습니다!![3]기록을 남기는 재채점* o="re"Accepted

주의: 채점 결과를 자동으로 가져오는 것이 아닙니다. BOJ의 웹 스크래핑은 규정으로 금지되어 있으므로, 해당 규정이 수정되거나 API를 제공받지 않는 한 채점 정보를 자동으로 가져오는 기능을 추가할 계획은 없습니다.

solved.ac 티어

  • 아이콘만 보이는 경우 [boj t="CODE"] : Ruby I
  • 티어 이름까지 보이게 할 경우 [boj t="CODE" o="name"] : Ruby I Ruby I
LookCode(t="")o="name"
Not Ratable-1, nrNot Ratable Not Ratable
Unrated0, urUnrated Unrated
sp
Bronze V1, b5Bronze V Bronze V
Bronze IV2, b4Bronze IV Bronze IV
Bronze III3, b3Bronze III Bronze III
Bronze II4, b2Bronze II Bronze II
Bronze I5, b1Bronze I Bronze I
Silver V6, s5Silver V Silver V
Silver IV7, s4Silver IV Silver IV
Silver III8, s3Silver III Silver III
Silver II9, s2Silver II Silver II
Silver I10, s1Silver I Silver I
Gold V11, g5Gold V Gold V
Gold IV12, g4Gold IV Gold IV
Gold III13, g3Gold III Gold III
Gold II14, g2Gold II Gold II
Gold I15, g1Gold I Gold I
Platinum V16, p5Platinum V Platinum V
Platinum IV17, p4Platinum IV Platinum IV
Platinum III18, p3Platinum III Platinum III
Platinum II19, p2Platinum II Platinum II
Platinum I20, p1Platinum I Platinum I
Diamond V21, d5Diamond V Diamond V
Diamond IV22, d4Diamond IV Diamond IV
Diamond III23, d3Diamond III Diamond III
Diamond II24, d2Diamond II Diamond II
Diamond I25, d1Diamond I Diamond I
Ruby V26, r5Ruby V Ruby V
Ruby IV27, r4Ruby IV Ruby IV
Ruby III28, r3Ruby III Ruby III
Ruby II29, r2Ruby II Ruby II
Ruby I30, r1Ruby I Ruby I
Master31, mMaster Master

solved.ac 유저 티어

  • [boj u="HANDLE"] : kimingan
  • 프로필 사진까지 보이게 할 경우 [boj u="HANDLE" o="pic"] : kimingan
  • 아레나 티어를 보이게 할 경우 [boj u="HANDLE" o="arena"] : kimingan
  • 아레나 티어와 프로필 사진을 동시에 보이는 경우 [boj u="HANDLE" o="arena pic"] : kimingan

1일 이상 새로고침되지 않은 핸들이 로드되면 새로고침됩니다.

예시: kimingan, kimingan, baekjoon, shiftpsh, solvedac, kimingan, kimingan

문제 정보

[boj p="PROBLEM NUMBER"]

문제 번호를 넣으면 문제 제목과 티어를 보여줍니다. 3일 이상 새로고침되지 않은 문제가 로드되면 새로고침됩니다.

예시: 1000, 27904, 27903

아레나 티어

티어를 입력하는 경우

  • [boj at="ARENA TIER"] : C
  • [boj at="ARENA TIER" o="old"] : C
  • [boj at="ARENA TIER" o="alt"] : C

레이팅을 입력하는 경우

  • [boj ar="ARENA RATING"] : A 1234
  • [boj ar="ARENA RATING" o="num"] : 1234
  • [boj ar="ARENA RATING" o="old"] : A 1234
  • [boj ar="ARENA RATING" o="alt"] : A 1234
  • [boj ar="ARENA RATING" o="old alt"] : A 1234 와 같이 옵션 중복 가능
Look | o="alt"Code(at="")Rating
Unrated Unrated0, ur 0
C C1, c 1 ~ 399
C+ C+2, c+ 400 ~ 799
B B3, b 800 ~ 999
B+ B+4, b+ 1000 ~ 1199
A A5, a 1200 ~ 1399
A+ A+6, a+ 1400 ~ 1599
S S7, s 1600 ~ 1799
S+ S+8, s+ 1800 ~ 1999
SS SS9, ss 2000 ~ 2199
SS+ SS+10, ss+ 2200 ~ 2399
SSS SSS11, sss 2400 ~ 2599
SSS+ SSS+12, sss+ 2600 ~ 2999
X X13, x 3000 ~

예시: B, A 1234, 1800

각주

각주
1 기록을 남기지 않는 재채점
2 반드시 [boj r="remain" s=""] 형식으로 사용해야 합니다.
3 기록을 남기는 재채점

360분의 게임으로 김사케를 행복하게 할 수 있을까?

보드게임컵 파티에 참가했습니다!

아침 일찍 병원에 갔다가 회기역으로 향했습니다.

장소가 집과 가까워서, 12시까지 도착이었지만 무려 10시 20분에 도착해버렸습니다.

대체 왜

근처 스타벅스에서 시즌 메뉴인 망고 용과 레모네이드 스타벅스 리프레셔를 마시고(여담이지만, 스타벅스 메뉴는 이름이 참 긴 것 같습니다), 11시쯤 맨 처음으로 들어가 여러 굿즈들을 받고 지정된 게임 앞에 앉아있었습니다.

한별이는 귀엽습니다

이후 toycartoon님이 2등으로 도착해 저와 같은 테이블에 앉아 이런저런 얘기를 나눴습니다.

toycartoon님은 봇치입니까

포춘쿠키에서는 Happy new year! 를 받았습니다. 지금은 5월인데...? 그리고 하나 더 깠더니 시간 초과를 받았습니다. :blobsad:

Happy new year!

그리고 12시가 되자 간단한 설명 이후 바로 보드게임을 시작했습니다.

규칙을 설명하는 havana723님

게임을 진행하고 있는 사람들

실시간으로 점수를 확인할 수 있다.

3번째 게임으로 리치마작을 진행했는데, 단 한 번도 화료하지 못하며 -1100점으로 마무리했습니다. 끝나기 직전에는 900점이 남아서 리치도 걸지 못했습니다.

'단 900점'

게임이 종료되고 스코어보드를 공개하며 시상을 진행했습니다. 핸들을 하나하나 부르시는 havana723님이 너무 힘들어보였습니다...

저는 10개의 게임을 진행했고, 2,570점을 기록하며 참가했던 49명 중 37등으로 마감했습니다.

37등 김사케

GameRankScore
기본 점수(보드게임컵 솔브)1 Solve50
노 땡스!#3120
뱅!#3240
리치 마작#4610
젠가#6140
할리갈리#7120
노 땡스!#270
UNO#1150
뱅!#1380
크레이지 타임#2430
노 땡스!#4260
Total#372,570

그리고 특별상을 시상했습니다. 저는 가장 많은 사람들과 게임을 플레이해 특별상을 받았습니다.

특별상 중 utilforever님이 후원한 상품이라고 무언가를 꺼내셨는데, 무려 '에어팟 3세대'였습니다. 솔직히 이건 특별상이 아닌 1등상입니다. 그런데 수상 조건이... '자신과 함께 게임을 플레이한 6명의 핸들을 정확히 말하는 것'이었습니다. 그래서 저는 포기했습니다. 대략 6명이 앞에 나갔는데, 그 중에서 가위바위보로 toycartoon님이 이겨서 핸들을 말하고 있다가, 6명째에서 뇌정지가 오셨습니다. 그리고...

너의 이름은.

제 핸들을 말씀하시며 에어팟을 타가셨습니다! 🎉🎉🎉

끝나고 toycartoon, kongum, jshyun912님과 함께 바로 옆에 있는 고기집으로 밥을 먹으러 갔습니다. 고기가 굉장히 두껍고 맛있었습니다. 그리고 가지🍆를 줍니다. 아무 생각 없이 들어간 곳 치고는 생각보다 매우 성공적이었습니다.

목살과 삼겹살

그리고 kongum님은 코포 블루를 가셨습니다. 축하합니다! 🎉

Accepted

이런 오프라인 이벤트가 더 많이 열렸으면 좋겠습니다. :blobaww:

toycartoon님의 후기 글도 읽어보세요!

승리의 여신: 니케 – SATELLITES

승리의 여신: 니케 0.5주년 이벤트 OVER ZONE의 테마곡 Satellites입니다.

이번 이벤트의 스토리가 좋기도 하고, 음악도 잘 뽑았다고 생각합니다.

Let our hopes flow through the wind
우리 희망을 바람에 실어

And say

Let it reach out to the satellites
저 위성에 닿게 해줘

And stay

We will flow
흘러 가

Inside the light
그 빛 속에서

We can see another day
또 다른 날이 우리 앞에

Across the line of lights
빛의 선을 넘어

So pave the way
길을 열어

Go towards a new day
새로운 날을 향해

Smoke and dust, our path is falling down
먼지와 연기 속에 무너지는 우리의 길

Take a look around, this is where we are
먼지와 연기 속에 무너지는 우리의 길

Ascend, look out far up in the sky
올라 가, 내다 봐 저 하늘 멀리

You'll see, the sun come up again
보이니, 다시 떠오르는 저 태양이

Take a look around
주위를 둘러봐

This is what we vowed
이게 우리가 한 맹세야

Another day

The wind will show us and say
바람이 말해줄 거야

Another way

This is not how it ends
이게 끝이 아니란 걸

Let our hopes flow through the wind
우리 희망을 바람에 실어

And say

Let it reach out to the satellites
저 위성에 닿게 해줘

And stay

We will flow
흘러 가

Inside the light
그 빛 속에서

We can see another day
또 다른 날이 우리 앞에

Across the line of lights
빛의 선을 넘어

So pave the way
길을 열어

Go towards a new day
새로운 날을 향해

Defections, meaningless victories, and
배신과 부질없는 승리, 그리고

Take a look around, this is what we are
주위를 둘러봐, 이게 바로 우리야

Ascend, a tale finding what we mean
올라 가, 이건 우리 의미를 찾는 이야기

A thousand ways that this could be
우리가 고를 수 있었던 그 많고 많던 길

Take a look around
주위를 둘러봐

Say your name aloud
네 이름을 크게 외쳐 봐

Another day

The wind will show us and say
바람이 말해줄 거야

Another way

This is not how it ends
이게 끝이 아니란 걸

Let our hopes flow through the wind
우리 희망을 바람에 실어

And say

Let it reach out to the satellites
저 위성에 닿게 해줘

And stay

We will flow
흘러 가

Inside the light
그 빛 속에서

We can see another day
또 다른 날이 우리 앞에

Across the line of lights
빛의 선을 넘어

So pave the way
길을 열어

Go towards a new day
새로운 날을 향해

Someday in front of me
언젠가 내 앞에서

And I say serenity
고요함을 외칠 때

And when out feet are marching
우리가 이 발을 내디딜 때

Gust will clear our sights
거센 바람이 우리 앞을 밝혀줄 거야

Stride out
한 걸음 한 걸음

We move on today
우린 오늘을 향해 나아가

Let our hopes flow through the wind
우리 희망을 바람에 실어

And say

Let it reach out to the satellites
저 위성에 닿게 해줘

And stay

We will flow
흘러 가

Inside the light
그 빛 속에서

We can see another day
또 다른 날이 우리 앞에

Across the line of lights
빛의 선을 넘어

So pave the way
길을 열어

Across the line of lights
빛의 선을 넘어

So pave the way
길을 열어

Go towards a new day
새로운 날을 향해

이세계 아이돌의 릴파님이 커버한 버전도 좋아합니다.

다시 흐르는 희망 안고
지평선 너머의 Satellite 까지
흘러가 빛을 따라
눈부신 바람을 타고
끝없이 펼쳐진 길을 열어
Go towards a new day

Smoke and dust, 자욱히 피어난
회색빛 풍경이 우리가 있는 곳
저기 하늘을 올려다봐
떠오를 태양을 기다린 날
다시 돌아봐줘 우리의 맹세야
저 바람이 말해 주고 있어
또 다른 길 열릴 거라는 걸

다시 흐르는 희망 안고
지평선 너머의 Satellite 까지
흘러가 빛을 따라
눈부신 바람을 타고
끝없이 펼쳐진 길을 열어
Go towards a new day

승리는 그 빛을 잃어가
주위를 둘러봐 우리의 오늘을
이제 와 의미를 찾는 것 따위
아무, 소용없을 테니
다시 돌아봐줘
외쳐봐 네 이름
저 바람이 말해 주고 있어
또 다른 길 열릴 거라는 걸

다시 흐르는 희망 안고
지평선 너머의 Satellite 까지
흘러가 빛을 따라
눈부신 바람을 타고
끝없이 펼쳐진 길을 열어
Go towards a new day

언젠가 내 앞에서 찾아가 평온함을
어둠을 몰아내는 바람을 타고
한걸음
오늘을 나아가

다시 흐르는 희망 안고
지평선 너머의 Satellite 까지
흘러가 빛을 따라
눈부신 바람을 타고
끝없이 펼쳐진 길을 열어
이 길의 끝으로 이어지는
Go towards a new day