【PS의 아이】

6월 17일부터 7월 6일까지 5개의 대회에 참가했습니다.

대회에디토리얼SolveRank
송도고 코드마스터 2023 Open Contest에디토리얼2 +0:31157/419
FunctionCup 2023 Open Contest-1 +55105/142
강원도 대학생 코딩 경진대회 Open Contest-1 +7089/138
UCPC 2023 예선 Open Contest에디토리얼1 +114179/227
2023 대구소프트웨어고 프로그래밍 경진대회 (DPC 2023) Open Contest-4 +15840/224

5월 중~하순에 7개의 대회에 출전(해서 1문제씩 긁은)한 후기는 여기서 볼 수 있습니다.

이 중 DPC는 6문제 중 무려 4문제를 풀어 내며 PS 인생 역사상 최대의 성과를 기록했습니다.

28235

CodeMaster A, AC / 1 +0:10

간단한 구현 문제입니다. if else를 적당하게 써 주면 됩니다.

28236

CodeMaster B, AC / 1 +0:21

학교 다니던 시절의 저를 생각나게 하는 문제였습니다. 수업에는 관심 없고 급식에만 관심이 있었거든요(제가 다녔던 고등학교는 급식이 맛있는 편이었습니다). 송도고의 급식실은 던전처럼 생겼군요 학생들은 반드시 가장 빠른 경로로 움직인다고 했기 때문에, 반드시 오른쪽 끝으로 간 다음 계단을 이용해 내려갈 것입니다. 3층에서 1층으로 신뢰의 도약을 한다는 선택지 같은 건 없습니다. 그렇다면, 오른쪽 계단까지 가는 길이와, 계단을 통해 1층으로 내려가는 길이를 더해 이 값이 가장 작은 반(들) 중 번호가 가장 작은 반의 번호를 출력하면 됩니다.

28270

FunctionCup MN, PAC / 1점 / 1 +55

사실 함수컵에서 이 문제가 없었다면 단 한 문제도 맞히지 못했을 겁니다.

함수컵의 문제. 난이도가 골드 5부터 시작한다.

이 문제의 서브태스크 1은 문제에서 주어진 예제만 들어옵니다. 예제 입력만 구분해 출력하도록 했습니다. 나중에 제 실력이 더 늘어나게 된다면 다시 풀어보겠습니다.

28281

강원도 대학생 코딩 경진대회 A, AC / 1 +70

연속된 이틀의 비용을 합친 값이 가장 작은 걸 구한 후, 거기에 X를 곱해 출력하면 됩니다.

28295

UCPC A, AC / 2 +114

UCPC 예선은 보통 A번 문제가 가장 쉽습니다. 그래서 일단 A번부터 긁었습니다.

학생들은 우향우를 하거나, 뒤로 돌거나, 좌향좌를 합니다. 10개의 입력을 받은 뒤, 마지막에 학생들은 어디를 보고 있는지를 출력하면 되는 쉬운 문제였습니다. 북쪽부터 0, 동쪽을 1, 남쪽을 2, 서쪽을 3으로 정한 뒤 각 입력에 따라 방향을 바꿔줬습니다.

이후 에디토리얼을 보았는데, “좌향좌”를 오른쪽으로 270도 도는 것으로 생각할 수 있습니다. 이렇게 되면 문제 풀이가 더 간단해집니다.

에디토리얼에 따르면, 출제자의 정해는 다음과 같습니다.

print("NESW"[sum(int(input()) for _ in range(10)) % 4])

여담이지만, UCPC에 출전하는 팀 이름이 너무 웃긴게 많습니다. 실수로물을너무많이줘버린나의라임오렌지과대성장트리 라던가, 멕시코시티노점상에서타코사먹는윤창기 라던가요.

28289

DPC A, AC / 1 +13

숫자 세 개씩이 들어옵니다. 첫 번째 숫자가 1이라면 이 사람은 아무 과에도 속할 수 없습니다. 그렇지 않다면, 이 사람은 반드시 어느 과에 속하므로 두 번째 숫자에 따라 적당하게 넣어주면 됩니다.

28290

DPC B, AC / 1 +16

문자열을 입력받고, 문제에서 제시한 문자열인지 확인하기만 하면 됩니다.

28292

DPC C, AC / 3 +94

읽고 말하기 수열, 개미 수열이라고 하는 수열에 대한 문제였습니다. 이 수열의 최대 100번째 수를 무턱대고 구하려고 코드를 짜고 돌려봤습니다. 당연히 시간 초과가 났습니다. 시간 제한이 1초인데, 나중에 이 글을 쓰는 시점에서 다시 돌려보니까 20분이 넘어가고 있었습니다. 뭔가 다른 방법이 필요했습니다.

당연히 이걸 통으로 구해서 푸는 문제는 아닐 것 같아 수열의 처음 15개를 보고 있는데, 수열의 어디에도 4는 나오지 않았습니다. 그래서 혹시 1 아니면 2 아니면 3 아닌가? 싶은 생각이 들었고, 역시나였습니다.

이 수열의 2번째 수까지는 1밖에 나오지 않습니다. 5번째 수까지는 1과 2만 나옵니다. 그 이외의 경우에는 3까지만 나온다고 추측하고, 입력에 따라 1 또는 2 또는 3을 출력하는 코드를 작성했더니 맞았습니다!!를 받았습니다.

28293

DPC E, AC / 2 +35

문제는 ab승의 자릿수를 구하는 것이었습니다. b \times \log_{10}\left ( a \right ) + 1 을 하면 구할 수 있다는 것을 어딘가에서 봐서 기억하고 있었습니다(대체 이걸 왜 알고 있는 거지). 그래서 그대로 구현했고, 맞았습니다!!를 받았습니다.

그런데, 대회 종료 이후 문제에 실수 오차와 관련된 오류가 있다는 의견이 있었고, 이 글을 작성 중인 현재는 채점 준비 중 이 걸려 있습니다. 처음으로 풀었던 Gold IV 문제였는데, 조금 아쉽긴 합니다.

실수를 다루는 문제에서는 컴퓨터에서 발생할 수 있는 오차를 항상 고려해야 합니다. 관련해서는 shiftpsh 님의 글이 도움이 됩니다.


언젠가는 더 어려운 문제도 풀 수 있게 되겠죠...? 대회 올솔도 하고 뭐 그런... 날이 오긴 할 겁니다.