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

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개 대회를 찍먹해 보았습니다.