대피 없는 대피 문자

5월 31일 새벽, 꿀잠을 자고 있던 김사케는 기분 나쁜 소리에 잠을 깼습니다. 그리고 핸드폰 화면을 보니,

[서울특별시] 오늘 6시 32분 서울지역에 경계경보 발령. 국민 여러분께서는 대피할 준비를 하시고, 어린이와 노약자가 우선 대피할 수 있도록 해 주시기 바랍니다.

위급재난문자, 06:41

어...? 자세히 들어보니 바깥에서 방송이 나오고 있습니다. 뭔가 큰일이 난 게 분명했습니다. 뉴스를 켜보려고 했습니다.

네이버 접속 장애

안 들어가집니다. 이럴 때 쓰려고 트위터를 깔아 놨었습니다. 들어갑니다. 다들 이게 무슨 일이지 하는 트윗을 올리고 있습니다. 그와중에 뉴스가 나옵니다. 북한이 뭘 쐈답니다.

생각해보니, 6시 32분에 경계경보를 발령했고, 문자를 41분에 받았습니다. 그런데, 북한이 진짜로 전쟁을 선포하고 미사일을 쏠 거였으면, 보통 발사한 지 2~3분 이내로 서울 한복판에 도달할 것임을 알고 있었습니다. 그런데, 이미 10분이 지났다? 이건 적어도 전쟁은 아닐 것입니다. 그리고 다시 자려고 누웠습니다.

[행정안전부] 06:41 서울특별시에서 발령한 경계경보는 오발령 사항임을 알려드림

위급재난문자, 07:03
[서울특별시]북한 미사일 발사로 인해 위급 안내문자가 발송되었습니다. 서울시 전지역 경계경보해제되었음을 알려드립니다. 시민여러분께서는 일상으로 복귀하시기 바랍니다.

안전안내문자, 07:25

오발령이랍니다. 내 이럴 줄 알았지.

경계경보 문자를 자세히 보면, 아무런 내용이 없습니다. 왜 대피를 해야 하고, 어디로 대피해야 하는지에 대한 내용은 전혀 들어있지 않았습니다. 진짜로 전쟁이 나면 이러다 다 죽을 것 같습니다.

이후 서울시는 행정안전부에서 지령 방송을 받고, 우선 경계경보를 발령했으며, 이는 당연한 절차라는 보도자료를 냈습니다.

우리나라만 경보를 발령한 것은 아닙니다. 일본에서도 자국민에게 대피 문자를 발송했습니다.

J-ALERT로 발송된 문자. '미사일 발사. 미사일 발사. 북한에서 미사일이 발사된 것으로 보입니다. 건물 안 또는 지하로 대피하십시오.'

북한이 발사체를 발사한 지 1분 만에, 왜 대피해야 하고, 어디로 대피해야 하는지 모두 명시가 되어 있는 문자를 발송했습니다.

우리나라의 대응은 고칠 점이 많습니다. 우리나라는 휴전 중인 국가고, 다음 번에는 실제 미사일일 수도 있으니까요.

solved.ac의 3주년과 함께했다

image by havana723

최근 알고리즘 문제해결에 취미가 생겼습니다. 처음에는 교내 동아리에서 BOJ를 알게 되었고, 문제 해결을 하면서 solved.ac를 알게 되었습니다. 솔브드는 처음에는 서강대 학회 내에서 사용할 서비스로 만들어졌지만, 지금은 10만 명 이상의 사용자(저도 그 중 한 사람입니다)가 있는 사이트로 성장했습니다. 그리고 이제 곧 3주년을 맞이한다고 합니다. 멋진 일이 아닐 수 없습니다.

제 나름대로 여러 가지 취미를 찾기 위해 노력했고, PS는 그 중 하나가 되었습니다. 지금은 간단한 구현밖에 하지 못하지만, 언젠가는 골드나 플래티넘 문제도 해결할 날이 올 것이라고 생각합니다(2023-05-30 기준 맞았습니다!!를 받은 가장 높은 티어는 Silver III Silver III입니다). 그리고 솔브드는 제가 PS를 하는 데 있어 큰 도움이 되고 있습니다.

매일 1문제 이상을 해결하면 아래 그림과 같이 스트릭이 이어집니다. 마치 매일 출석 도장을 찍는 느낌이랄까요. 스트릭을 잇기 위해 매일 최소 1문제씩을 풀고 있습니다. 덕분에 꽤나 규칙적인 생활을 하는 느낌입니다.

2023-05-30 기준 50일 연속 문제 해결.

남들 눈에는 별 것 아닌 것 같아 보여도 지금의 저에게는 백준과 솔브드가 일상의 큰 부분을 차지하고 있습니다. 최근에는 개인적으로나 업무적으로 좋지 않은 일들이 여럿 있었는데, 그럼에도 불구하고 가만히 누워있기만 하지 않고 어떻게든 한 걸음 나아갈 수 있게 되었습니다.

솔브드를 만들어 주신 shiftpsh님께 감사드립니다.

YOASOBI – アイドル (아이돌)

최근 매우 큰 인기를 끌고 있는 【최애의 아이】의 오프닝입니다. 저는 보다가 1화에서 꺼버렸지만요.

無敵の笑顔で荒らすメディア
무테키노 에가오데 아라스 메디아
무적의 미소로 휩쓰는 미디어

知りたいその秘密ミステリアス
시리타이 소노 히미츠 미스테리아스
알고 싶은 그 비밀 미스터리어스

抜けてるとこさえ彼女のエリア
누케테루 토코사에 카노죠노 에리아
얼빠진 부분조차 그녀의 에리어

完璧で嘘つきな君は
칸페키데 우소츠키나 키미와
완벽하고 거짓말쟁이인 너는

天才的なアイドル様
텐사이테키나 아이도루 사마
천재적인 아이돌 님

(You're my savior, You're my saving grace)
(너는 나의 구원자, 너는 나를 구원하는 은총)

今日何食べた?好きな本は?
쿄오 나니 타베타? 스키나 홍와?
오늘 뭐 먹었어? 좋아하는 책은?

遊びに行くならどこに行くの?
아소비니 이쿠나라 도코니 이쿠노?
놀러갈 때는 어디로 가?

何も食べてないそれは内緒
나니모 타베테나이 소레와 나이쇼
아무것도 안 먹었어 그건 비밀

何を聞かれてものらりくらり
나니오 키카레테모 노라리 쿠라리
무엇을 물어봐도 못 들은 척

そう淡々とだけど燦々と
소- 탄탄토 다케도 산산토
맞아 담담하게 하지만 눈부시게

見えそうで見えない秘密は蜜の味
미에소우데 미에나이 히미츠와 미츠노 아지
보일 듯 보이지 않는 비밀은 꿀맛

あれもないないないこれもないないない
아레모 나이 나이 나이 코레모 나이 나이 나이
이것도 아냐 아냐 아냐 저것도 아냐 아냐 아냐

好きなタイプは?相手は?さあ答えて
스키나 타이푸와? 아이테와? 사아 코타에테
좋아하는 타입은? 사람은? 자 대답해 줘

「誰かを好きになることなんて私分からなくてさ」
"다레카오 스키니 나루 코토 난테 와타시 와카라나쿠테사"
"누군가를 좋아하는 것 같은 건 난 잘 모르거든"

嘘か本当か知り得ない
우소카 혼토카 시리에나이
거짓인지 참인지 알 길이 없는

そんな言葉にまた一人堕ちる
손나 코토바니 마타 히토리 오치루
그런 한마디에 또 한 사람 넘어가네

また好きにさせる
마타 스키니 사세루
또 좋아하게 만드네

誰もが目を奪われていく
다레모가 메오 우바와레테쿠
누구나 시선을 빼앗기는

君は完璧で究極のアイドル
키미와 칸페키데 큐-쿄쿠노 아이도루
너는 완벽하고 궁극적인 아이돌

金輪際現れない
콘린자이 아라와레나이
두 번 다시 나타나지 않을

一番星の生まれ変わり
이치반보시노 우마레카와리
샛별의 환생

その笑顔で愛してるで
소노 에가오데 아이시테루데
그 미소로 '사랑해'로

誰も彼も虜にしていく
다레모 카레모 토리코니 시테 이쿠
누구나 모두 포로로 만들어

その瞳がその言葉が嘘でもそれは
소노 히토미가 소노 코토바가 우소데모 소레와
그 눈동자가 그 한마디가 거짓이라도 그것은

完全なアイ
칸젠나 아이
완전한 사랑아이

はいはいあの子は特別です
하이 하이 아노 코와 토쿠베츠데스
네네 그 아이는 특별합니다

我々はハナからおまけです
와레와레와 하나카라 오마케데스
저희들은 애초부터 덤이랍니다

お星様の引き立て役Bです
오호시사마노 히키타테 야쿠 B 데스
별님을 돋보이게 하는 역할 B입니다

全てがあの子のお陰なわけない
스베테가 아노 코노 오카게나 와케 나이
모든 것이 그 아이 덕분일 리 없어

洒落臭い妬み嫉妬なんてないわけがない
샤라쿠사이 네타미 싯토난테 나이 와케가 나이
시건방져 시샘, 질투 따위 안 할 리가 없잖아

これはネタじゃないからこそ許せない
코레와 네타쟈 나이 카라 코소 유루세나이
이건 장난이 아냐 그러니 더 용서 못 해

完璧じゃない君じゃ許せない自分を許せない
칸페키쟈 나이 키미쟈 유루세나이 지분오 유루세나이
완벽하지 않은 넌 용서할 수 없어 스스로를 용서할 수 없어

誰よりも強い君以外は認めない
다레요리모 츠요이 키미 이가이와 미토메나이
누구보다도 강한 너 말고는 인정하지 않아

誰もが信じ崇めてる
다레모가 신지 아가메테루
누구나가 믿고 떠받드는

まさに最強で無敵のアイドル
마사니 사이쿄-데 무테키노 아이도루
그야말로 최강이자 무적의 아이돌

弱点なんて見当たらない
쟈쿠텐 난테 미아타라나이
약점 따위 보이지 않아

一番星を宿している
이치반보시오 야도시테 이루
샛별을 품고 있어

弱いとこなんて見せちゃダメダメ
요와이 토코난테 미세챠 다메 다메
약한 부분 같은 건 보이면 안 돼 안 돼

知りたくないとこは見せずに
시리타쿠 나이 토코와 미세즈니
알고 싶지 않은 부분은 보여주지 않고

唯一無二じゃなくちゃイヤイヤ
유이이츠 무니쟈 나쿠챠 이야 이야
유일무이하지 않으면 싫어 싫어

それこそ本物のアイ
소레 코소 혼모노노 아이
그것이야말로 진정한 사랑아이

得意の笑顔で沸かすメディア
토쿠이노 에가오데 와카스 메디아
능숙한 미소로 달구는 미디어

隠しきるこの秘密だけは
카쿠시키루 코노 히미츠다케와
끝까지 숨길 거야 이 비밀 만큼은

愛してるって嘘で積むキャリア
아이시테룻테 우소데 츠무 캬리아
사랑한다는 거짓말로 쌓는 커리어

これこそ私なりの愛だ
코레 코소 와타시나리노 아이다
이것이야말로 나 나름의 사랑이야

流れる汗も綺麗なアクア
나가레루 아세모 키레이나 아쿠아
흐르는 땀도 아름다운 아쿠아

ルビーを隠したこの瞼
루비-오 카쿠시타 코노 마부타
루비를 숨긴 이 눈꺼풀

歌い踊り舞う私はマリア
우타이오도리 마우 와타시와 마리아
노래하고 춤추는 나는 마리아

そう嘘はとびきりの愛だ
소- 우소와 토비키리노 아이다
그래 거짓말은 최고의 사랑이야

誰かに愛されたことも
다레카니 아이사레타 코토모
누군가에게 사랑받은 적도

誰かのこと愛したこともない
다레카노 코토 아이시타 코토모 나이
누군가를 사랑해 본 적도 없는

そんな私の嘘がいつか本当になること
손나 와타시노 우소가 이츠카 혼토니 나루 코토
그런 나의 거짓말이 언젠가 진심이 될 거라고

信じてる
신지테루
믿고 있어

いつかきっと全部手に入れる
이츠카 킷토 젠부 테니 이레루
언젠가 반드시 전부 손에 넣을 거야

私はそう欲張りなアイドル
와타시와 소- 요쿠바리나 아이도루
나는 그래 욕심쟁이 아이돌

等身大でみんなのこと
토-신다이데 민나노 코토
있는 그대로 모두를

ちゃんと愛したいから
챤토 아이시타이카라
제대로 사랑하고 싶으니까

今日も嘘をつくの
쿄오모 우소오 츠쿠노
오늘도 거짓말을 하는거야

この言葉がいつか本当になる日を願って
코노 코토바가 이츠카 혼토니 나루 히오 네갓테
이 말이 언젠가 진짜가 될 날을 바라며

それでもまだ
소레데모 마다
그래도 아직

にだけは言えずにいたけど
키미키미니 다케와 이에즈니 이타케도
에게만은 말하지 못하고 있었지만

やっと言えた
얏토 이에타
드디어 말했다

これは絶対嘘じゃない
코레와 젯타이 우소쟈 나이
이건 절대 거짓말이 아니야

愛してる
아이시테루
사랑해

(You're my savior, my true savior, my saving grace)
(넌 나의 구원자, 나의 참된 구원자, 날 구원하는 은총)

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

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