잼민이 시절에 주말이면 가족들 다같이 사직운동장으로 가서 자전거 대여점에서 자전거를 빌려 타곤 했다. 거기서 네발 자전거로 시작해서, 어느 순간에는 보조 바퀴를 떼기 시작했고, 그때 당시 기어 자전거라고 불리며 내 체격에 비해 다소 큰 자전거를 타곤 했다. 자전거를 바꿀 때마다 더 짜릿한 속도감을 느낄 수 있었던 점이 좋았다.
 
군대 때 가게 된 첫 훈련에서부터 나는 '자전거 = 자유'라는 막연한 의미를 부여하기 시작했다. 경기도 양평 근처에서 탱크가 강을 건너는 훈련이었는데, 훈련장 바로 옆으로 자전거길이 나 있었다. 당시 소대에서 막내였던 나는 이른바 조뺑이를 치고 있었는데, 허리가 아파서 잠깐 기지개를 키던 찰나에 자전거길 위로 몇 대의 자전거가 쌩 달리며 지나가는 게 눈에 들어왔다. 자전거 타고 시원하게 달리던 그 사람들이 너무 부러웠고, 전역하면 나도 그 느낌을 경험해 보고 싶었다. 전역 이후에 여행지의 자전거 대여점에서, 아니면 간간히 온천천 무료 대여소에서 자전거를 빌려서 타곤 했는데, 매번 즐거웠다.
 
5월 초에 자전거 국토종주를 계획중인 지인의 소식을 접하게 되면서, 처음 자전거 국토종주의 존재를 알게 되었다. 삘이 강렬하게 꽂혔던 나머지 온갖 관련 유튜브와 블로그를 보면서, 빠른 시일 내에 나도 떠나야겠다고 다짐했다. 그렇게 생애 처음으로 내 자전거를 가지게 되었다.

 

5월 19일

더보기

안녕 토마스, 아니 도마스 자전거

2022-23 도마스 케이던스 H21 하이브리드 자전거. 구매 링크는 https://www.gorgotago.com/shop/view.php?index_no=8194&enterc=naverpay&NaPm=ct%3Dm0mk394f%7Cci%3Dcheckout%7Ctr%3Dppc%7Ctrx%3Dnull%7Chk%3D184011d1939cf82afb0f0b39dd10f97dd490b085#prdSpec

가성비 GOAT 자전거라는 후기글이 많아서 구입했다. 본래 옷도 무난한 색을 선호하는 편인데, 노란색으로 확 튀는 이 자전거는 느낌이 마치 영화 트랜스포머에 나오는 범블비 같아서 마음에 들었다. 밝은 색이라서 프레임의 오염 상태도 한눈에 보이고, 도로 위의 운전자 눈에도 잘 보여서 더 좋다고 생각했다. 이 자전거를 처음 받은 순간은 평생 잊을 수 없을 것 같다. 외할머니께서 "자전거 반품 안 되나? 취업을 해서 차를 살 생각을 해야지, 뭐 할려고 자전거를 사. 차라리 반품하고 차를 사. 돈 모자라면 이 할미가 돈 보태줄게." 묵직한 팩트를 맞고 흐르려는 눈물을 참고, 하려던 얘기를 전하지 못하고, 자전거 출정식을 하러 갔다. "이 자전거 30만원도 안 하는 건데 돈 얼마나 보태주게?"라는 말 따위 꺼낼 수도 없는 백수라서 울컥했다. 시작부터 완전 산통 다 깼네.
 

맑은 날의 온천천과 수영강 자전거길을 '내 자전거'로 달리니 기분이 나아졌다. 국토종주 가기 전에 자전거를 오래 타는 연습을 해 둬야 한다는 후기글을 많이 봐서 이때 이후로도 자주 자전거를 탔다.

6월 2일

더보기

인천으로 출발~!

이미지 출처: https://www.yeongnam.com/web/view.php?key=20120418.010020801160001

국토종주 코스는 인천에서 출발해서 부산에 도착하는 방향으로 선택했다. 자전거와 함께 이용 가능한 교통 수단은 고속 버스뿐이었는데, 인천-부산 이라는 거리를 종주가 끝나고 버스로 이동하고 싶지 않았기 때문이다. 코스를 타면 탈수록 부산에 가까워진다는 의미가 집이 가까워진다는 의미로 곧바로 와 닿는 게 힘이 많이 될 것 같았다. 기간은 가장 레퍼런스가 많은 4박 5일로 잡았다.
 

처음으로 타본 프리미엄 고속버스. 운 좋게 차량의 짐칸에 여유가 많아서 기사님께 양해를 구하고 자전거를 실을 수 있었다. 만약 그렇지 않았다면, 자전거를 실을 수 있는 고속버스를 만날 때까지 차표를 사고 기다려야 했을 것이다. 그건 상상만 해도...

인천에 도착해서 자전거 상태부터 확인했다. 다행히 다친 데는 없어 보인다.

무사히 숙소에 도착했다. 터미널에서 숙소까지 차도를 이용해야 했다. 인천 시내는 처음이었고, 차도를 이용한 경험이 많이 없던 탓에 자전거 교통 법규도 익숙치 않아서 가장 긴장감 넘치는 라이딩이었다. 숙소에 도착하기 직전에 스마트폰 거치대와 핸들 바를 결합시키는 나사가 헐거워진 나머지 빠져버렸고, 스마트폰이 바닥에 떨어져 액정 보호 필름이 깨졌다. 이때부터 경각심이 생겨서 자전거를 타기 전에 자전거에 결합된 장비의 연결을 체크했다.

6월 3일

더보기

인천에서 양평까지

서울쪽 오면 늘 점심 메뉴로 육쌈냉면이 떠오른다. 첫날인 만큼 든든하게 배 채우고 시작했다. 날이 쨍하니 더웠는데, 맛이 시원시원하니 좋았다.

출발점인 아라 서해갑문 인증센터에 도착해서 국토종주 인증수첩을 발급받았다.

출발선이 꽤 웅장하게 꾸며져 있어서 사진을 안 찍을 수 없었다.

서울에 진입하기 직전에 찍은 사진이다. 서울에 저런 멋진 산도 있었구나. 무슨 산인지는 모르겠다. 

한강을 가로지르는 다리를 보며 서울에 온 걸 실감했다.

한강 여의도공원 근처 편의점에서 점심을 먹었다. 메뉴는 국룰로 정했다. 탁 트인 경치를 보며 마시는 국물맛이 참 좋았다.

이게 아마 잠실대교 위였던가. 대낮에 보는 사우론의 탑은 창문이 아주 매끈하게 잘 닦인 느낌이었다.

서울에서 빠져나갈 때즈음 찍은 사진이다. 햇살에 비친 먼지 같은 게 다 하루살이들이다. 근처에 숲이나 물가가 있으면 날벌레가 많이 꼬였다. 이 다음에 아이유 3단 고개라고 불리는 3단 업힐이 나왔던 걸로 기억한다. 아이유의 "좋은 날"을 한 곡 다 듣기도 전에 끝날 것 같은, 극히 짧은 구간이었다.

뜻밖에 야간 라이딩을 하게 되었다. 사진은 하늘이 밝게 나왔지만, 실제로는 어두워서 라이트를 키고 자전거를 타야 했다. 불빛에 이끌린 날벌레들이 별처럼 쏟아졌고, 내 고글에 들이받으면서 나는 타다닥 소리가 끊이질 않았다. 

6월 4일

더보기

양평에서 충주 수안보까지

양평 시내의 숙소 창문으로 보이는 풍경. 사진에 나오는 뒷산 어딘가에 신병 교육대가 있었다. 거기서는 양평 시내가 내려다 보였다. 저녁무렵이면 시내의 가장 높은 빌딩에서 불빛 두어 개가 깜빡였다. 그걸 볼 때면 사회에 대한 그리움이 막연히 생겨나곤 했다. 지금은 똑같은 빌딩을 보며, 그리고 외박을 나오면 놀러다녔던 저 시내를 보며, 묘한 애틋함을 느끼고 있구나. 하는 감상에 빠져 있다 보니 해가 중천이었다. 늦었다.

양평에서 이포보 가는 길에 만난 한적한 자전거길. 내가 상상한 국토종주 자전거길에 가장 가까운 풍경이었다.

여주보에서 강천보 가는 길. 괜히 여주 평야가 유명한 게 아니구나 싶을 정도로, 산이 멀리 있고 평평한 땅이 드넓었다.

강천보에서 비내섬 가는 길. 놀랍게도 강원도였다.

비내섬 인증센터 근처의 어느

카페에서 파는 매실 에이드의 맛이 정말 좋았다. 여기서 남은 시간과 내 평균 속도를 계산해서 숙소를 골라 예약했다.

계산이 틀렸다는 걸 깨달았을 때는 어두운 밤이었다. 다행히 차가 거의 다니지 않아 안전하게 다닐 수 있었다. 다만 멈추면 모기까지 달라붙기 때문에 계속 달려야만 했다.

수안보 도착하면 맛있는거 먹을 기대를 하고 도착했는데, 저녁 10시 무렵이었음에도 문을 연 식당이 없었다. 네이버 지도에는 다 영업중이라고 돼 있었는데, 온천욕으로 유명한 지역으로 여름은 비수기라서 그렇다고 한다.

그래도 숙소에 비비큐 가맹점이 딸려 있길래 음식을 양껏 주문했다. 로봇이 방문 앞까지 와서 서빙해주는 게 신기했다. 음식 본연의 맛이 좋았고, 점심 때 먹은 육개장 사발면이 오늘 끼니의 전부였던 터라 싹 다 비울 수 있었다.

6월 5일

더보기

충주 수안보에서 경북 의성까지

부모님 세대의 취향을 저격하는 메뉴로 유명한 이 지역의 식당에서 한 끼를 못 해 보고 가면 아쉬울 것 같아서 아침을 사 먹었다. 역시 비수기인 탓에 오전 9시가 넘은 시간이었음에도 영업을 하는 식당이 없어서 동네 한 바퀴 돌다가 찾은 식당에서 순두부 찌개를 먹었다. 담백하고 심심했다. 오늘 빡센 언덕 두 개를 넘어야 했기에 영양을 생각하며 싹 다 비웠다.

소조령과 이화령 모두 사진 속 언덕의 경사도에서 큰 편차 없이 유지되는 느낌이었다. 다만 경사 구간의 길이가 문제였다. 소조령은 그래도 자전거를 타고 오를 만 했는데, 이화령은 초심자인 나로서는 끌바를 할 수밖에 없었다.

끝날듯 끝나지 않던 이화령 고개를 넘고 나니 만난 뷰. 어제까지 우리 강의 아름다움을 감상했다면 오늘은 우리 산의 차례였다. 왜 국토종주 자전거길이 우리 강산의 아름다움을 자신이 원하는 속도로 즐길 수 있다고들 말하는지 알 수 있었다.

이온음료를 보충하러 들어간 매점에서 팔던 청포도 스무디. 이번 여정에서 마신 것들 중 최고의 맛이었다.

저 터널을 기점으로 충청도와 경상도가 나뉜다고 한다. 벌써 경상도라니, 집이 가까워져 오는 듯해서 좋았다.

낙단보 근처의 어느 한식뷔페에서 밥을 푸짐하게 먹었다. 한식뷔페라기 보다는 자율배식하는 기사식당에 가까웠던 것 같다. 그래도 꿀맛이었다.

자전거 보관까지 가능한 숙소를 찾는 게 쉽지 않다 보니, 무인텔에서의 1박이라는 경험도 살면서 처음으로 해 봤다.

 

6월 6일

더보기

경북 의성에서 경남 합천까지 

경상도라고 해서 그리 가까워진 건 아니구나 하는 걸 깨닫게 해주는 표지판이었다. 그저 하루빨리 낙동강하굿둑까지 남은 거리가 두 자릿수로 떨어지기만을 바랐다.

칠곡보에서 강정고령보 가는 길. 강 위에 만들어진 자전거길이었는데, 노면의 상태가 좋아서 달리는 맛이 좋았다.

달성보에서 합천창녕보 가는 길. 저 구간은 대체로 짧지만, 길의 굴곡이 상하좌우로 다이나믹했다. 15도 넘는 급경사를 몇 번 만나서 다 끌바를 했다.

합천창녕보에서 숙소가 있는 적교장으로 가는 길. 해질 무렵의 오렌지빛 하늘은 빨리 달려야 야간 라이딩을 피할 수 있다는 걸 뜻하지만, 사진에 담고 싶었던 풍경이다.

이 근방에 사는 분들 중 암벽등반가가 있다면 저길 연습처로 많이 삼을 듯하다.

적교장에 도착했을 때에는 뜻밖에 외국인 투숙객이 많아서 남는 방이 없었다. 그런데 다른 숙소로 가려면 수십 킬로는 더 가야 하는데 이미 깜깜한 저녁인데, 가로등은 거의 없고 자전거 전조등은 수안보에서 출발할 때 호텔방에 깜빡 두고 온 터였다. 참 난감하던 차에 주인 분께서 직원용 숙소 같은 곳에 재워주셨다. 감사함과 안도감과 함께 근처 식당에서 먹는 돈까스는 정말 풍요로웠다.

6월 7일

더보기

경남 합천에서 부산 을숙도까지

오늘은 4박 5일 여정의 마지막날이기도 하고, 주행 거리가 가장 길기도 하고, 종주 인증을 받으려면 영업 종료 시간인 5시 30분까지 을숙도에 도착해야 해서 오전 6시에 길을 나섰다. 아직 해가 낮게 떠서 그리 덥지도 않고 바람이 솔솔 불어오고, 길 위에 차가 없고 사람도 없고 자전거도 없어서 가장 한적했던 길이다.

이화령 고개와 함께 악명 높은 업힐로 손꼽히는 박진고개. 해가 점점 높아지면서 햇빛을 견디며 오르기가 버거웠다. 끌바가 나를 선택했다. 오르는 길에 도로 외벽을 가득 채운 낙서들을 구경하는 재미가 쏠쏠했다.

이번 국토종주에서 만난 업힐 중 가장 파멸적인 경사도를 자랑하는 영아지고개. 정말 딱 보자마자 어이를 상실했다. 이번에도 끌바의 선택을 받고 오르는 길에 본 표지판에는 대충 20을 훌쩍 넘기는 경사도가 적혀 있었다.

창녕함안보에서 양산 물문화회관으로 가는 길에 차도를 지나는 오르막 구간이 있었다. 서둘러 오르느라 급하게 기어변속을 하다가 뚜두둑 뭔가 튿어지는 소리가 나더니 페달을 아무리 밟아도 헛돌기만 했다. 바로 옆에 차들이 쌩 하고 지나고 있던 터라 심장이 움찔했다. 다행히 큰 문제는 아니고 체인이 빠진 거라, 유튜브에서 내가 해당하는 케이스의 해결법을 찾아서 잘 조치할 수 있었다.

국토종주 자전거길의 포토스팟 중 하나. 한 폭의 액자 모형이다.

양산 물문화회관 인증센터에서 조금 가니 반가운 이름이 보였다. 부산 지하철 노선도에서만 보던 그 이름. 2호선의 종착지 호포. 이젠 정말 끝이 임박했구나 실감하는 순간이었다.

삶에 대한 미련이 없는 사람들만 자전거를 타고 내려갈 수 있는 즉사 코스. 자전거를 끌고 내려가는데도 상당한 가속력이 붙었다.

드디어 도착했다! 도착하는 순간을 상상할 때에는 엄청난 감동이 물밀듯 밀려오지 않을까 기대했는데, 막상 도착해 보니 아무런 감흥이 없었다. 인천의 출발지점에 비해 부산의 도착지점이 덜 꾸며진 것처럼 보여서 그런 걸까. 아무튼 종주를 끝낸 것에 대한 후련함보다는 퇴근 시간에 차도를 타고 집으로 돌아갈 것에 대한 염려가 더 컸다. 

8월 초

더보기

국토종주 인증서 수령

국토종주를 끝낸 그날에는 인증서 수령까지 한 달 넘게 걸릴 수 있다는 말에 대해 별 생각이 없었는데, 두 달 뒤에 왔다. 그리고 그 시간이 길긴 길었다. 기억이 어느정도 희석된 탓일까? 인증서를 받고 나니 감회가 새롭거나 하는 일은 없었다.

9월 8일 오늘

더보기

인천에서 부산까지 자가 동력으로 여정을 마치고 석 달이 지난 오늘

 
올해 들어서 나는 마치 방전된 사람처럼, 그저 흘러가는 대로 흐느적거리며 살아가고 있었다. 과거의 나에서 정체되어 있는 현재를, 바쁘게 발전하는 사회에 견주면 도태되고 있는 흐름을, 견딜 수가 없었다. 그걸 바꿔나갈 의지도, 의욕도 없었다. 자전거를 타고 국토를 종주한다는 기획은, 그것들로부터 벗어나기 위해 마련한 탈출구였다.
 
그런데 나는 그토록 바랐던 자전거를 타는 와중에도 자유롭지 못할 때가 있었다. 이따금씩 "남들은 이미 취업했거나 취준하고 있는데, 백수 주제에 국토종주 하고 싶다고 며칠씩이나 통째로 놀 자격이 있는 건가?" 라는 물음이 머리를 때렸다. 그런 나 자신이 한심하다 느껴질 즈음이면, 페달을 있는 힘껏 밟고는 했다. 그러면 신기하게도, 결여된 자신감이니 자격이니 하는 문제는 자취를 감추고, 지금 이 순간에 최선을 다하고 있다는 사실만이 내가 직면하는 전부였다. 그럴 때 비로소 해방감 비슷한 걸 느꼈다.
 
633km의 자전거 국토종주. 전반적으로 지독하게 지루한 여정이었다. 두 눈을 자극하는 풍경을 만끽하는 순간은 짧은 시간이었고, 그럴 때 귀를 즐겁게 하려고 듣던 노래의 효험은 오래 가지 못했다. 페달을 밟을 때마다 두 무릎에서 느껴지는 저릿함, 손잡이를 고쳐 잡지 않으면 두 손에서 느껴지는 찌릿함은 그 지루함을 더욱 견디기 싫은 것으로 만들었다. 하지만 싫증이 난다는 이유 하나만으로 그만둘 수는 없었다. 나는 그 속에서 즐길 거리를 만들었다. 평균 속도 올리기라던지, 최고 속도 올리기라던지, 영화 "기생충"에 나온 송강호와 같은 편안한 승차감의 운전이라던지. 그러고 나면 총 거리가 얼만지는 중요하지 않았다. 단지 127km라는 오늘 하루의 몫을 해내기만 하면 되는 것이었다. 오늘 조금 덜했으면 내일 더하면 되고.
 
며칠 전 회사 대표님과 사담을 나누다가 자전거 이야기가 나왔고, 내가 올해 한 국토종주 이야기를 했다. 대표님께서도 그걸 하고 싶으셨는데 일 때문에 며칠 씩이나 시간을 낼 수는 없어서 못하고 있으시다고, 부럽다고 하셨다. 그리고 작은 칭찬을 덧붙이셨다. 그걸 도전할 생각을 하고, 실천하고, 완수했다는 것이 대단하다고. 도전과 노력 끝에 다가오는 보상, 그리고 거기에 도달하기까지의 과정에 높은 가치를 두는 사람, 내가 그런 사람인 것 같다고 말씀하셨다.
 
종주를 막 끝낸 시점의 나는 그 길 위에 아무런 깨달음이 없었다고 여겼다. 그러다 대표님의 말씀을 듣고 국토종주를 하던 때의 나를 돌아봤다. 자세히 보니 거기에 온갖 깨달음의 여지가 산재해 있다. '자전거 페달을 밟는다'라는 구체적인 활동을 통해 '인천에서 부산까지 간다'라는 단 하나의 목표를 달성하는 과정 속에서 '나의 느낀점'와 '느낀점에 대한 나의 대응'은 간단명료하게 드러난다. 온갖 모호한 활동과 복잡다단한 과제들로 점철된 일상에 비해서, 나에 관한 발견을 하기 유리한 환경인 것이다. 다른 건 몰라도 이제 "나는 이런 사람이에요"라는 걸 이해하기 쉽게 말할 수 있다

 

https://recruit.navercorp.com/micro/teamnaver2024/tech#n

 

2024 팀네이버 신입 공채

팀네이버에서 새로운 궤도를 그려갈 당신을 기다립니다

recruit.navercorp.com

처음 치르는 네이버 신입 공채 코딩 테스트. 여러모로 운이 참 좋았다.

 

밤잠을 1시간 만에 깨고 더 이상 잠이 안 와서 밤을 지샜다. 6시에 울려대는 알람을 끄고 아침을 먹고 나서 6시 반에 누워버리고 말았다. 알람도 없이 눈을 뜬 뒤 시계를 보고는 정말이지 십년감수했다. 9시 반이었다. 30분은 필요한 세팅을 마치고 제 시간에 시험 환경에 입장하는 데 충분한 시간이었다.

 

간밤에 폰 배터리가 없는데 충전기마저 없어서 고민하다가 근처 CU에서 일회용 충전기를 5천원에 사서 충전을 했는데 60% 정도 충전됐다. (아이폰13 미니) 2시간 동안의 화면 송출을 감당할 수 있을까 걱정했다. 다행히 캠 공유에 사용되는 모니토앱은 못 보던 사이 배터리 절약 모드라는 새로운 기능을 선보이고 있었다. 그렇게 시험이 끝났을 때 배터리를 30%나 남겨주었다.

 

와이파이가 불안정한 환경이라 불안했다. 시험 도중에 갑자기 뭐라고 alert 창이 뜨길래 "올게 왔구나" 하다가 "헐 저장 안 했는데 다시 짜야 하나" 식겁하던 1분이 지나고 다시 와이파이를 잡을 수 있었다. 내 코드는 다행히 입력이 있을 때마다 클라인지 서버인지 모를 어딘가에 상태 관리가 되어 있었고 풀이를 이어갈 수 있었다.

 

무엇보다 시험 도중에 화장실 이용이 금지되어 있는데, 다행히 화장실 이슈가 없었다!

 

 

말로만 전해 듣던 네이버 코테. 시간에 쫓겼다.

 

1, 2, 3번을 1분씩 훑어보고 윤곽이 가장 선명한 1번부터 풀었다. 우선순위 큐 기반의 풀이였다. 주석으로 풀이를 먼저 적어놓고 코드를 작성하던 도중에, '아차' 싶어서 필요한 자료구조를 하나 더 추가하고 세세한 로직을 수정하다 보니 주석이 무색해졌다. 정말 디지털 치매가 있어서 단기기억에 심각한 지장이라도 초래된 건지, 중간에 엉뚱한 변수를 넣은 코드를 발견도 못하고 System.out.println 찍어가며 디버깅하느라 20분은 더 태운 것 같다. 테케를 통과하는 코드를 제출하고 남은 시간은 1시간이었다.

 

2번은 5분 동안 골똘히 생각해 봐도 해법이 떠오르지 않았다. 그래프 관점에서 생각해 봤는데 영양가가 1도 없었다. 3번 풀이에 들어갔고 이때는 주석으로 푸는 습관이 꽤 큰 도움이 되었다. 내가 써놓은 주석을 읽다 보니 머릿속에 3개의 구간으로 분할된 수직선이 떠올랐고 생각하기 편해졌다. 명백한 그리디 문제였고, 최적이 될 수 있는 케이스를 다 고려했다. 만약 히든 테케가 있어서 틀리는 풀이라면, 그건 실수가 아니라 실력 문제일 것이다. 테케를 통과하는 코드를 제출하고 남은 시간은 15분이었다.

 

다시 2번으로 돌아왔다. 이건 보내줘야 하나 못내 아쉬운 마음과 함께 5분 동안 골똘히 생각했다. 해법이 떠올랐고 그것은 투 포인터였다. 10분 안에 짤 수 있을까 의구심과 함께 바쁘게 코드를 작성했다. 시간은 주말 버프까지 받으며 폭주하듯 흘러가는데, 그에 반해 내 키보드 커서는 첫휴가 복귀하는 이등병의 발걸음마냥 느ㅡ릿했다. 결국 5초 남기고 미완성인 코드를 제출했다. 아, 5분만 더 있었더라면... 하는 생각이 곧바로 들었다.

 

 

불태우고 나니 머릿속이 하얗던 코테. 마지막이 될 수 있을까?

 

1번의 구현에 나름 섬세함이 필요했기에 체감 난이도는 골드4였다. 그런데 우선순위 큐가 아닌 셋이나 맵을 활용하면 훨씬 간단하게 구현할 수 있었다. 출제자가 의도한 정해가 그것이라면 난이도는 실버2인 듯하다.

 

2번은 투 포인터로 이어지기 위한 인사이트를 얻기까지 오래 걸렸던 탓일까, 체감 난이도는 골드3이었다. 그 원인에는 종이와 펜을 사용하지 않은 탓도 있었을 테다. 3번을 풀 때 나타나 줬던 그 수직선을 2번을 풀 때에도 그려 봤다면 좀 더 빨리 유레카 할 수 있었을 것이다. 그런 인사이트를 배제한 순수 구현 난이도는 실버2인 듯하다.

 

3번은 "내가 놓친 케이스가 있는지 더 점검해볼까?"와 "시간도 없는데 이쯤 하고 다른 문제로 넘어가자" 사이의 딜레마를 일으키는 그리디 알고리즘이라서 체감 난이도가 골드2였다. 비슷한 문제가 존재한다면 그 문제의 난이도 역시 골드2일 것이라고 본다.

 

커트라인이 어느 정도일 지 감도 안 잡히는 데에도 계속 따지게 되는 상황이 영 마뜩잖다.

 

 

아, 대기업 코테 치고는 쉽다더니. 그저 아쉽다.

 

작년에는 자기소개서의 빈칸 네 개를 보며, 딱히 적을 경험이 없어서 도망쳤다.

올해에는 자기소개서의 빈칸 세 개를 보며, 떳떳하게 자랑할 수 없는 경험이라 도망치려다가

"그거 때문에 지원 안 하는 거는 진짜 말리고 싶다"는 어느 형님의 만류에

감사히 용기를 얻어서 꾸역꾸역 1000자씩 채우고 지우고를 반복했다.

 

시원하게 오늘 세 문제 다 풀었다면

만약 불합격 메일을 받더라도

부족하게 적은 경험 때문이라고 확신할 수 있었을 텐데.

 

코테도 지금처럼 꾸준히 풀고

자소서/면접/CS도 지금보다 다섯 배 열심히 해야지.

 

 

 

 

순식간에 흘러간 5개월이었다. 매일 일정한 시간에 점심을 먹고 집으로 향하면서, 계절이 변하고 시간이 흘러감을 그 어느 때보다 실감나게 느꼈던 5개월이기도 하다. 오늘을 보내고 내일을 맞아야 한다는 사실이 아쉬우면서도, 잠은 참 잘 왔던 하루하루였다. 그 아쉬움은 시간 또는 시간 관리 능력의 부족 때문이었고, 아쉬움을 달래기 위해 밤잠을 줄였다. 무리한 생활 패턴을 지속한 탓이었을까? 학기 중에도 반쯤 몽롱한 채로 보낸 듯하고, 학기가 끝나고 나서 찍은 사진 속 내 얼굴은 싸피 전보다 어두워져 있다.

 
교육을 받는 도중에는 성과에 대한 압박감 속에 지낸 때도 있었다. 한창 프론트엔드 개발을 배울 때였는데, 마구잡이로 들어오는 지식들에 머리는 터질 것 같고, 이걸 바탕으로 역량을 발휘해야 할 프로젝트 기간이 두려웠다. 그리고 개발자가 정말 적성에 맞는지도 고민이었다. 이런 지식들을 받아들이면서도 무언가를 만들고 싶다는 생각이 전혀 안 들었으니까. 수심에 잠긴 내 뒷통수를 본 MJ는 고민이 있냐고 물어왔다. 나는 프로젝트 경험이 많은 MJ에게 첫 프로젝트가 어땠는지 물었다. 그 친구도 처음에는 어떤 부담 같은 걸 느끼지 않았을까 짐작했지만, 돌아오는 대답은 달랐다. MJ는 원하는 기능을 하나씩 추가하는 재미가 있다고, 그래서 프로젝트를 하는 게 부담스럽기 보다는 즐거웠다고 했다. 그러면서 "작은 것부터 하나하나 완성해 나가면, 오빠한테도 개발이 좀 더 재밌어지지 않을까?"라고 덧붙였다. 그때는 일단 그 말을 믿어보기로 했다.
 
지난 한 학기는 치열했는가? 매 순간이 치열하지는 않았다. 다만 그 누구에게라도 치열했다고 말할 수 있는 순간은 있다. 웹 서비스 개발에 필요한 지식을 모두 배우고 난 뒤, 파이널 관통 프로젝트를 진행할 때였다. 카카오 모빌리티의 길찾기 API를 경로 추천 서비스에 적용하는 작업이었다. 서비스의 핵심 로직 구현을 다중 경유지 길찾기 API 호출 한 번으로 충당할 수 있으리라 판단했으나, 테스트해 보니 출발지와 경유지 사이에 거리 제한이 있었다. 간단히 말해 부산 사는 사람이 경주 여행을 계획할 때에는 경로를 추천해줄 수 없었다. 나는 이런 한계를 받아들이기 싫었고, 직접 구현한 TSP 알고리즘을 사용해서 구현하기로 했다. 이는 예상보다 훨씬 더 많은 시간을 요구했다.

더보기

이런 로직이었다.

 
JS로는 간단했던 API 호출 및 JSON 파싱 작업을 Spring Service Layer에서 처리하기 위해서 새로운 라이브러리 사용법을 배워야 했고, 이전보다 복잡해진 로직을 구현하기 위한 세부 사항들을 결정하는 데에도 고민이 필요했다. 내가 제안한 개선 사항이고, 그것 때문에 일정에 차질이 생기는 것은 싫었기 때문에 밤을 불태웠다.

오전 6시가 조금 넘은 시각에 경로 추천 서비스 처리 결과가 의도한 대로 콘솔창에 출력되는 것을 봤을 때에는 피로가 싹 사라지는 기분이었다. 곧바로 씻고 집을 나설 때의 눈꺼풀은 무거웠지만 발걸음은 가벼웠다. 밤을 샌 탓에 페어 SY를 걱정시키기도 했지만, 밤을 샌 덕택에 SY와 하이파이브를 시원하게 치며 하루 일정을 시작할 수 있었다.

프로젝트 발표날, 특히 공을 많이 들였던 핵심 기능을 시연할 때에는 더욱 뿌듯했다. 예전에 MJ가 말해줬던 개발의 재미가 이 맛이구나.
 
많은 것을 배웠던 한 학기였다. 다소 거리를 두고 추상적으로만 받아들였던 웹 서비스 개발을 구체적으로 배우고 직접 해 보는 시간이었다. 그 덕분에 개발과 나 사이에 있던 일종의 장벽을 무너뜨릴 수 있었다. 그 장벽은 아무래도 비뚤어진 '완벽'주의일 테다. 하지만 핵심은 '완성'에 초점 두기에 있다는 것을 이제는 안다. 프로젝트 개발 일정을 맞추기 위해서든, 개발의 재미를 맛보기 위해서든. 그게 가장 큰 배움이었다.

자랑스러운 아들, 믿음직한 동료 개발자에 한 발 다가선 것 같다. DS 교수님께서는 내가 "가진 실력에 비해 다소 자신감 없이 말을 하는 편이다. 말하기 연습을 해라"고 하셨다. 운이 좋았던 덕택에 자신감은 만땅이다. 말하기 연습만 하면 되겠다. 물론 2학기 때의 '무에서 유를 창조하기'를 팀원들과 매끄럽게 해내기 위한 준비도 이번 한 달간 해야지.
 
 

# 집 to 싸피 to 집

1월 4일부터 싸피 9기 과정을 시작했다. 명지에 자리잡은 최저가 원룸을 알아보며 들떴으나, 앞으로를 위해 돈을 최대한 모아야 한다는 생각이 들었고, 그냥 매일 3시간 반 정도의 왕복 통학 시간을 감당하기로 했던 터다. 그 시간 동안 생산적인 일을 하면 돈도 굳어서 좋다고 생각했지만, 통학 버스 안에서 내 반고리관은 멀미를 일으킬 만큼 취약했다. 자연스레 버스 안에서의 시간은 음악을 듣거나 멍 때리는 시간이 되었다. 집에 돌아와서 보내는 시간을 치열하게 보내려면, 운동을 체계적으로 해서 체력을 길러야 할 것 같다. 통학 버스를 놓치면 큰일 나기 때문에, 아침 6시에 기상하는 생활 패턴도 자리 잡혀 가고 있다. 십수 년간 해야 하는 것이라고 생각만 했던 '아침형 인간 되기'를 어쩌다 보니 하게 되었다. 역시 보상과 처벌만큼 강한 동기는 없는 듯하다. 

 

# 발표 불안 극복 ing

'싸피를 실패할 기회의 장으로 여기자'라는 다짐을 선택의 순간마다 생각했던 것 같다. 그래서 자신 없는 와중에도 자원해서 몇 번의 발표 기회를 얻었다. 아이디어톤을 하면서 우리 팀의 아이디어와 프로토타입을, 다른 팀들의 유려한 ppt에 비해 상당히 미니멀한 장표를 가지고 떨리는 목소리로 발표할 때에는, 가장 많은 사람들의 웃음과 질문을 얻어냈다. 내 목소리가 마이크로 어떻게 출력되는지 확인하려고 "아,"  했을 때 자잘하게 일던 사람들의 웃음과 요동치기 시작하던 심장은, 잊지 못할 첫 발표의 기억으로 남을 것 같다. 메소드 오버로딩과 오버라이딩의 차이에 대해 발표할 때에는 가장 많은 박수를 얻어냈다...고 한다. 소나무를 클래스로 관리할 때 필요한 특성들을 발표할 때에는 사고 방식이 가장 독특하다는 교수님의 평가를 받았다. 이같은 일련의 과정 속에서 발표는 더 이상 '내 약점이 드러나면 어쩌지? 절대 실수하지 말자' 같은, 불안의 소용돌이가 아니었다. '내 발표가 가치 있으려면 어떻게 하지? 이것만큼은 분명히 전달하자' 같은 방법론에 몰두하다 보니, 즐길 수 있었다. 물론 그런다고 긴장감이 사라지지는 않았지만, 끝났을 때 적잖은 효능감이 찾아왔다.

 

# MBT'I' in 많은 사람들

9 to 6 내내 사람들과 어울리며 생활하고 작업하는 것이 꽤 커다란 자극으로 다가온다. 무엇이든 '혼자' 하는 것이 편하지만, 동기들과 '같이' 하는 것 역시 생각 이상으로 편했다. 물론 맞춰 가는 과정에서 쌓이는 피로감에는 어느 정도 적응해야 할 것 같다.

 

# 많은 사람들 in SSAFY

정말 다양한 사람들과 어울릴 기회인 것 같다. 대학에서 경험하는 것보다 더 넓은 스펙트럼의 사람들을 만나고, 친해질 가능성도 더 열려 있는 것 같다. 협업, 그리고 다른 사람을 배려하는 소프트 스킬은 지금 내게 가장 부족하면서 가장 필요한 것이기에, 많이 부딪혀 볼 것이다.

 

# 비전공자반에서 전공자반으로

분반 테스트 결과 Java 전공반으로 이동하게 되었다. 일주일간 비전공자반에서 스타트 캠프를 하며 친해진 동기들과 다른 반이 된 것이 아쉬웠다. 오며 가며 이야기를 나누는 것으로 아쉬움을 달래고 있다. 전공자반 사람들과도 친해지려고 노력중이다. 좋은 사람들이 참 많은 것 같다.

 

# 이제 본 과정 시작이다

매 순간 치열하게 배우고 익히는 것을 목표로 하자. '주말에는 잠을 좀 많이 자둬라' 하시던 교수님의 말씀도 잊지 말자.

면접장 가는 길.
빌딩숲 우거진 테헤란로는
마음이 차분해질 만큼 드넓었다.
똑바로 읽어도 거꾸로 읽어도 똑같은
지하철역 계단을 막 올랐을 때 첫인상은 그랬다.

직장인들 우르르 몰려다니는 식당가를 지나
조금 더 걸어서 한적한 골목의 덮밥집을 찾았다.
구천 오백원을 주고 제육덮밥을 주문했다.
동네 이름값을 고려하면 나름 괜찮은 맛과 가격.

면접장 입구로 들어서니.
1층에서 대기중인 정장부대의
굳은 뒷모습에 숨이 턱 막힌다.
분명 후기글에서는 캐주얼 반 정장 반이랬는데.
들어오니 숨은 캐주얼이 꽤 많이 있어 안심이었다.

씨티와 피티는 순간 뇌정지가 왔지만
정신을 부여잡고 무난히 잘 처리했고,
면접관님의 긍정적인 반응이 올 무렵
마음 한 켠에 펄럭이는 희대의 플래그.
해치웠나?

면접장 출구로 나오니.
비내리고 어둑한 테헤란로는
마음이 초라해질 만큼 드높았다.
서울역으로 가야했지만 넋이 나간 탓에
버스를 거꾸로 타서 대치 키즈들을 보고 왔다.

내 생애 첫 면접
다음 한해를 두고 품었던 기대
그리고
유튜버 슈카를 닮은 면접관님은 말씀하셨다.
지원자 분께 우리 교육이 의미가 있을지 의문입니다.

슈카월드보다 훨씬 더 촌철살인 입담에
혼절 직전까지 탈탈 털렸지만
지당하신 말씀이었다.
별다른 효용 없었을 6개월을 지켜서 기뻐해야할지
한 달 동안 부풀은 기대가 어긋나서 슬퍼해야할지.

내일 시험이라서 다행이다.

http://icpckorea.org/

ACM-ICPC Korea Regional Site

icpckorea.org

킨텍스 제2전시장까지 올라가는 길도 정말 길었고, 전시장 내부도 정말 넓었다. 대한민국에서 공간 밀도가 가장 낮은 건물이 아닐까.
울학교 자료구조/알고리즘 과목 교수님을 여기서 뵙다니! 참 반가웠다. 녹화된 동영상으로 듣던 익숙한 목소리에 마음이 편해졌다.
본 대회 전날 시험장에서 진행된 연습 세션이다. (Photo by B)
시험장의 반입 물품에는 제한이 있었고, 사진 속 세 가지 물건만 소지하고 들어갔다.


10:00부터 15:00까지 풀 12개의 문제가 주어졌다.

괜찮았던 점
1. I번이 감이 잘 안 와서 빨리 스킵한 덕택에 가장 쉬운 J번을 빨리 풀 수 있었다.
2. K번의 점화식 찾기를 끈질기고 신중하게 한 끝에 풀이에 성공했다.
3. E번에서 빠뜨린 조건도 다시 보고, 끝까지 unordered_map의 사용을 어필해서 꽤 빠르게 정답에 다가갔다.

아쉬웠던 점
1. I번의 점화식 찾기와 F번의 디버깅에서 팀원의 말벗 되기 말고는 실질적인 도움을 못 준 것
2. K번에서 "TLE 떠도 괜찮다"라는 안일한 말 한 마디를 하며 상수 시간을 많이 잡아먹는 코드를 그대로 제출했고, TLE가 뜨며 페널티를 받은 것. 코드를 수정하는 1분을 못 참아서 20분의 페널티를..
3. 대회 종료 2시간을 남긴 시점 이후로 D번만 팠지만 정답 풀이를 떠올리지 못한 것 (이번 대회에서 제출 대비 정답 수가 가장 낮은 문제였다고..)
4. D번에서 팀원들이 배열과 관련하여 사용 가능한 O(NlogN) 이하의 알고리즘을 브레인스토밍하고 있을 때, 의견을 내지 않고 택도 없는 냅색 접근에 몰두하고 있던 것

감상
1. 실력만큼 치르고 왔다. 풀 수 있는 문제는 다 풀었으니까.
2. 삽질만 하는 2시간 동안, 잊을 만하면 주변에서 들려오던 하이파이브 소리를 들을 때의 그 감정, 잊을 수가 없을 것 같다.
3. 내가 가진 역량의 100만큼은 해서 다행이지만, 120만큼은 못 해서 아쉽다. 우리 팀의 6솔 아닌 5솔과 관련이 있기도 하다.

D번을 풀었다면 순위가 확 올라갔겠다..는 욕심이고, 40등과의 페널티 차이가 7분인 것이 눈에 밟힌다
시원섭섭함과 함께, 여러모로 배운 점도 많고 즐거운 대회이자 축제였다! (Photo by B)
맞춘 문제를 나타내는 ICPC의 시그니처인 풍선. 구름이 THINK, 전구가 CREATE, 풍선이 SOLVE를 나타낸다는 걸 대회장에 설치된 현수막을 보고 처음 알았다.


'대회 개최연도 기준으로 여섯 학번 이전까지'의 '재학생'만 참가를 허용하는 규정이 바뀌지 않는 한, ICPC에 다시 출전할 기회는 결코 없을 것이다. 대회 준비 과정이나 당일이나, 대개 내가 부족한 부분을 직면하는 시간이었고, 그 부족한 부분을 너그러이 봐준 팀원 B, 팀원 C, 그리고 (전)팀원 A에게 고맙다. GNUisNotUnix를 오마주했다는 팀명만큼이나 긍정적인 자극을 많이 준 팀원들. 우연이 조금만 어긋났더라도 놓쳐버리고 말았을 마지막 기회를, 그들과 함께했기에 좋은 추억으로 마무리할 수 있는 것 같다.

친구들은 내게 등수를 묻고는 '그래서 몇 등 했다고?' 질문을 수 차례 반복하며, 이 등수가 (특히 1등만 기억하는 세상에서는) 기억되지 못할 등수임을 암시하는 듯 나를 놀렸다. 글을 쓰다 보니 '71개 팀 중 41등'이라는 숫자는 정말 사소해진다.

이처럼 좋은 기회와 좋은 사람들을 더 많이 만나려면, 그리고 그에 걸맞는 사람이 되려면, 더 열심히 공부해야겠다.

지금 당장 로마자 가득한 수식을 봐도 머리에 산소가 고갈되는 게 느껴지는데, 논문 읽고 문제 푼다는 '그 레벨'에 도달할 수 있을지는 모르겠다. 그래도 스스로 가능성을 열어두는 편이 여러모로 좋을 듯하다. 백준 문제를 푸는 것의 재미, '나'라는 사람의 한계를 스스로 어떻게 정의하는지에 영향을 줄 것 같다.

https://solved.ac/profile/dbtjd1928


인상 깊은 문제

https://www.acmicpc.net/problem/13329

ICPC 인터넷 예선 대비 모의 연습을 할 때 풀이를 시도했지만, 계속 맞왜틀을 시전했던 문제다. 원점에서 각각의 꼭짓점에 내린 직선이 y값의 유계에 해당하는 평행선과 만난다고 할 때, 이 교점들을 좌표 압축하여 세그먼트 트리에서 사용할 인덱스로 변환하고, 먼저 떨어지는 유성부터 기존의 구간에 완전 포함되는지 여부를 따지고 트리를 갱신하는 풀이였다. 엣지 케이스가 도통 떠오르지 않아서 구글링해보니 정석 풀이는 내 것과 전혀 달랐고, '아! 이렇게 풀면 되구나!' 싶은 깨달음은 전혀 없을 정도로 모호했고, 각도 정렬이라는 생소한 개념만 기억에 남는다.

틀린 풀이

더보기
#include <bits/stdc++.h>
using namespace std;
typedef long double ld;
typedef tuple<ld, ld, ld> tld;
typedef pair<int, int> pi;

const int SZ = 2e5;
const ld INF = (ld) 1e18;

vector<ld> spotVec;
vector<tld> polyVec;
unordered_map<ld, int> spotMap;

bool lazy[8 * SZ], seg[8 * SZ];

void updateLazy(int node, int start, int end) {
    if (lazy[node]) {
        seg[node] = false;
        if (start != end) {
            lazy[node << 1] |= lazy[node];
            lazy[node << 1 | 1] |= lazy[node];
        }
        lazy[node] = false;
    }
}

void update(int node, int start, int end, int l, int r) {
    updateLazy(node, start, end);
    if (start > r || end < l) {
        return;
    }
    if (l <= start && end <= r) {
        lazy[node] = true;
        updateLazy(node, start, end);
        return;
    }
    int mid = (start + end) >> 1;
    update(node << 1, start, mid, l, r);
    update(node << 1 | 1, mid + 1, end, l, r);
    seg[node] = seg[node << 1] | seg[node << 1 | 1];
}

bool query(int node, int start, int end, int l, int r) {
    updateLazy(node, start, end);
    if (start > r || end < l) {
        return false;
    }
    if (l <= start && end <= r) {
        return seg[node];
    }
    int mid = (start + end) >> 1;
    return query(node << 1, start, mid, l, r) | query(node << 1 | 1, mid + 1, end, l, r);
}


int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);


    int n; cin >> n;
    spotVec.reserve(2 * n);
    polyVec.reserve(n);
    for (int i = 0; i < n; i++) {
        int m; cin >> m;
        ld minX = INF, maxX = -INF, minY = INF;
        for (int j = 0; j < 2 * m; j += 2) {
            ld x, y; cin >> x >> y;

            ld curX = x * 1e8 / y;
            minX = min(minX, curX);
            maxX = max(maxX, curX);
            minY = min(minY, y);
        }
        spotVec.push_back(minX);
        spotVec.push_back(maxX);
        polyVec.emplace_back(minY, minX, maxX);
    }

    sort(spotVec.begin(), spotVec.end());
    spotVec.erase(unique(spotVec.begin(), spotVec.end()), spotVec.end());
    int cnt = 1;
    for (int i = 0; i < spotVec.size(); i++, cnt += 2) {
        spotMap.emplace(spotVec[i], cnt);
    }
    cnt -= 2;

    sort(polyVec.begin(), polyVec.end());

    fill(seg, seg + 8 * SZ, true);

    int ans = n;
    for (auto &[minY, minX, maxX] : polyVec) {
        int lp = spotMap[minX], rp = spotMap[maxX];
        if (query(1, 1, cnt, lp, rp)) {
            ans--;
        }
        update(1, 1, cnt, lp, rp);
    }
    cout << ans;
    return 0;
}


이 문제 풀이를 위한 로직을 이해하게 된다면, 내가 맞왜틀이라고 생각한 풀이의 엣지 케이스도 떠올릴 수 있지 않을까?

'내가 가는 여정을 담는 그릇' 카테고리의 다른 글

첫 면접  (0) 2022.12.12
ICPC 본선을 곱씹어 보며  (0) 2022.11.20
2022 LG CNS 코드 몬스터 예선 후기  (0) 2022.11.12
ICPC 예선을 곱씹어 보며  (0) 2022.10.09
백준 다이아까지 1걸음  (0) 2022.09.26

대기업은 아침형 인간을 좋아하는 걸까?
삼성 청년 소프트웨어 아카데미(SSAFY) 인적성 평가는 오전 9시부터 70분간 치러졌고,
LG 코드 몬스터는 오전 10시부터 3시간 동안 치러졌다.

인적성 평가를 마치고 호다닥 코몬 응시 환경에 입장했다.
https://career.programmers.co.kr/competitions/3089

2022 LG CNS Code Monster

career.programmers.co.kr


1번 문제
완전 탐색으로 풀었다. 탐색해야 하는 경우의 수가 그렇게 많지 않다는 건 알았지만, 유효한 경우를 판별하기 위한 구현이 왠지 복잡해 보였고, 2번 3번을 풀고 4번이 감이 오지 않자 1번을 잡았다. 필수적이지는 않지만 누적합을 이용해 유효한 경우를 판별하고, 정렬 우선 순위를 Python의 람다식으로 선언하여, 조건 분기를 많이 하지 않고도 풀 수 있어서 좋았다.

2번 문제
DFS로 풀었다. 비슷한 유형을 여러 번 접해본 경험 덕택인지, 금방 풀 수 있었다.

3번 문제
DP로 풀었다. 많은 부문자열을 저장하기 위한 자료 구조로 트라이를 사용했다. 제한 시간이 10초라서 그냥 unordered_set에 저장해도 되지 않을까 싶었지만, 이번 대회는 채점 결과를 확인할 수 없다보니 시간 복잡도를 줄이려고 트라이를 썼다. 그런데 괜히 급하게 트라이를 써서 구현 미스로 인한 로직 에러가 발생하지 않을까 걱정되기도 한다.

4번 문제
오일러 경로 테크닉레이지 세그먼트 트리를 이용해 풀이를 시도했지만, 대회 종료까지 1분 남기고 겨우 완성한 코드를 실행해 보니 예제가 나오지 않았다. 단순 구간 합 트리에 '구간 업데이트-점 쿼리'가 필요한 거라 펜윅 트리를 쓰는 게 효율적이겠다 싶었으나, 정작 그 펜윅 트리의 '점 업데이트-구간 쿼리'에서 어떻게 변형해서 쓰더라? 하는 고민만 20분은 한 것 같다. 레이지 세그가 비록 무겁긴 하지만, 제한 시간도 10초고 빨리 구현할 수 있으니까~ 하는 결론이 서고 나서야 코드를 짜기 시작했다. 그 20분을 허비하지 않았다면 비벼볼 만 했겠다 싶은 아쉬움이 있다.

3솔이라기 보다는 3서브밋 이라고 봐야 겠다. 4번 문제를 LCA를 응용하면 훨씬 간단히 풀 수 있다고 말해준 지인은, 이번 본선컷이 4솔이라고 예상했다. 음... 내 결과가 실망스럽진 않지만 그래도 아쉽다.

그래도 처음으로 문제에 따라 자신 있고 간편한 언어를 선택해서 풀이했던 대회라는 점에서 만족한다.

+ Recent posts