-
2021 이화여대 전국 여고생 프로그래밍 경진대회 후기PS하는 abra/후기 2021. 7. 10. 23:39
오늘은 작년에도 봤던 이화여대 대회에 참가했다.
원래는 이화여대에 가서 시험을 본다던데 작년에 이어 올해도 코로나때문에 온라인으로 진행되어 좀 아쉽다.
대회는 프로그래머스에서 2시간동안 6문제로 진행되었다.
이화여대 대회는 주의해야 할 점이 몇가지 있다.
우선 참가자격이 여고생에게만 주어진다는 것. 이 분야의 상위권이 대부분 남자라는 점을 생각하면 여학생들에게 이 대회는 아주 좋은 기회가 될 수 있다.
다음으로는 프로그램을 제출 후 결과를 확인할 수 없다는 것이 있다. 예전의 정보올림피아드 지역 본선의 방식을 떠올리면 된다. 문제를 다 풀었어도 예상치못한 버그가 있을수도 있다는 점이 대회가 끝나고도 완전히 마음을 놓지 못하게 만드는 요인이다. 이때문에 문제를 풀고 남은 시간에는 다시 문제와 내 코드를 보며 이런저런 데이터들을 넣으며 테스트한다.
또, 독특하게도 C++을 사용할 수 없다. 거의 C++을 사용하는 나는 C로 시험을 봐야 했다. 작년에는 C++을 못쓴다는 것을 알고 미리 sort같은 것들을 연습했었는데(쓸 필요는 없었다.) 올해는 까먹고 있다가 대회가 시작하고 나서야 깨달아서 혹시 문법상의 문제로 억울하게 문제를 못 풀까봐 걱정했는데 다행히 원활하게 치를 수 있었다.
문제는 전체적으로 좀 쉬운 편이다. 그래도 2시간이라는 짧은 시간동안 6문제를 풀어야 되고, 여학생들만 참가한다는 점을 고려하면 적당한 난이도인것 같다.
작년과 올해 대회를 종합해 생각해보면 3~4문제는 기본적인 구현 문제이고 나머지 문제가 변별력을 갖지 않나 싶다.
아마 난이도 순서대로 번호를 부여한 것 같다. 감사합니다.
올해 1번은 1부터 n까지의 정수 중에서 숫자 m을 포함하는 수를 모두 출력하는 문제였다. 예를 들어 n=77, m=7이라면 7 17 27 37 47 57 67 70 71 72 73 74 75 76 77을 출력하면 된다. n의 값이 1000까지였나? 암튼 작기 때문에 간단하게 1부터 n까지 반복을 돌리며 각 수를 /10과 %10을 이용해 각 자리를 분해하며 m이 있는지를 확인해주면 된다.
2번은 예산 이내로 여행을 하는 문제인데, 여행할 수 있는 10개의 코스(?)가 있는데 각 코스마다 도시의 이름과 그 도시에 며칠간 머무는지, 그리고 그때의 비용이 정해져 있다. 우리는 예산과 방문할 코스가 순서대로 주어질 때, 코스가 끝나거나(0이 입력되면 끝이다) 예산을 다 쓰면 멈춘다. 그리고 이때까지 방문한 도시들의 이름과 총 날짜 수, 총 금액을 출력하면 된다. 매우 간단한 문제지만 도시 이름과 날짜수, 비용을 프로그램에 하나하나 입력해야만 풀린다는게 아쉬웠다. 복사라도 되게 만들었으면 좀 나았을텐데, 저 표가 이미지로 주어져서 정말 한글자 한글자 따라 칠 수밖에 없었다. 문제해결능력을 시험하는 것과는 거리가 먼 부분인지라 그다지 좋은 문제는 아니었다고 생각한다.
3번은 어떤 m자리수의 자연수 n의 각 자리의 숫자를 m제곱하여 더했을 때 n이 되는 수인지를 판별하는 문제이다. 예를 들어 153 = 1^3 + 5^3 + 3^3이므로 153은 조건에 맞는 수이다. 1번처럼 /10과 %10으로 분해해주고 잘 계산해주면 된다.
사실 3번과 4번의 순서가 헷갈려서...이게 맞는지는 모르겠지만..
4번은 어떤 문자열에서 같은 문자가 반복될 때 이것을 문자 하나와 몇번 반복되었는가를 나타내는 숫자로 바꾸는 방식으로 인코딩된 문자열이 주어졌을 때, 처음의 문자열을 출력하라는 문제이다. 즉, a3bcd4a2라고 입력되면 aaabcddddaa라고 출력하면 된다. 여기서 같은 문자는 최대 9번까지만 반복되기 때문에 별로 더럽지 않게 구현할 수 있었다.
5번은 갑자기 어려워져서 내가 떠올리고 있는 풀이가 정해가 맞나?라는 의구심이 들었지만 다른 풀이는 생각나지 않아서 그냥 짰다.
삼각형의 세 꼭짓점의 좌표와 어떤 한 점의 좌표가 주어질 때, 이 점이 삼각형의 내부에 있는지를 판별하는 문제이다. ccw를 이용해서 풀었다. 대회가 끝나고 친구에게 물어보니 각 변의 길이를 구한 뒤 코사인법칙을 이용해 얻은 각으로 판별하는 풀이를 제시해 주었다. ccw가 맞는 풀이인가보다...ㅋ
삼각형의 세 점을 반시계방향 순서로 따라가면서 모든 변에 대해 '어떤 점'이 좌회전인지 확인해줬다. 반대로하면 시계방향으로 가면서 우회전인지 확인하면 된다.
그리고 지금 생각난건데 그냥 시계방향/반시계방향 순서대로 정렬할 필요없이 삼각형의 세 꼭짓점을 A, B, C라고 하고 판별할 점을 P라고 했을 때, A, B, C의 회전 방향(ccw의 부호)과 A, B, P의 회전 방향이 같은지를 확인하는 작업을 A, B, C를 바꾸어가며 3번 실행해도 될 것 같다.
6번은 문제 이해하기가 좀 어려웠다. 아직도 제대로 이해한 것인지 모르겠다. 그래서 문제 설명은 생략하겠다.
피보나치 수열과 DP를 이용해 해결해 주었다.
다 풀고나니 한 50분정도 남았었는데, 앞서 말했듯이 남은 시간은 코드에 버그가 없는지 테스트하며 보내주었다.
그래도 코드 실행을 하면 이화여대 측에서 제공한 약 5개의 데이터에 대해서는 실행 결과를 보여주기 때문에 좀 안심이 되었다.
문제에 값의 범위가 명시되어있지 않아 질문을 했었는데, 신속하고 친절하게 답변해 주셔서 기분이 좋았다.
작년에는 문제 하나가 잘못돼서 빼고 진행했어서 좀 실망했었는데, 올해는2번에서 표를 그대로 따라치며 살짝 빡쳤던 것 외에는문제도 진행도 만족스러웠다. 아마 이게 정상인 거겠지.
암튼 이렇게 대회를 마쳤고, 좋은 결과가 있으면 좋겠다.'PS하는 abra > 후기' 카테고리의 다른 글
2021 KOI 2차 후기 (2) 2021.08.01 2021 제6회 국민대학교 알고리즘대회 예선 후기 (2) 2021.07.31 2021 KOI 1차 후기 (2) 2021.05.15 2021 카카오 채용연계형 인턴십 for Tech Developers 코딩테스트 후기 (2) 2021.05.08 2021 2차 선발고사 후기 (0) 2021.02.28