티스토리 뷰

코드포스 후기 #8


Codeforces Round #390 (Div. 2)
2017/01/06(금) 23:35



한동안 집에서 컴퓨터를 키지 않아서 멀리하다가 새해를 맞이해서 오랜만에 맘먹고 도전!!

...했지만 오랜만에 덤볐더니 결과는 역대급으로 처참했다 ㅠ_ㅠ



A. Lesha and array splitting

일단 오랜만에 문제를 풀려니 A번부터 읽히지가 않고(아이고 영어실력이 점점..ㅜㅜ) 멍해져서 1차 멘붕!

제목 그대로 array 자르기 문제인데, 문제 조건 하나를 빼먹고 풀어서 처음으로 Hack을 당했다! 2차 멘붕

한번도 당해본 적이 없어서 Hack을 당하면 해당 데이터를 볼 수 있는줄 알았는데 안보여서 3차 멘붕...

C번을 풀다가 돌아와서 보는데 정신이 없어서 결국 틀린 조건을 못찾았는데, 대회가 끝나니 Hack data를 볼 수 있어서 봤더니 입력 [1 1]일 때라서 4차 멘붕!!!

문제에 있는 "possibly one" 조건을 빼먹고 무조건 2개 이상으로 잘라야하는 줄 알고 1개일 때를 불가능처리했던 것이었다... 흑

그 조건 처리해서 다시 제출해서 맞은걸로 위안을 삼으며... 아무튼 풀이는 간단하다.

문제에 수식처럼 써있는건 그냥 간단히 말하자면 주어진 배열을 가위로 자르듯 중간에 cutting해서 조건을 만족하게 만들 수 있는지 여부를 가리라는 것인데 (조건은 모든 부분 배열의 합이 0)

일단 입력을 받으면서 원래 배열의 total 합을 구한 다음에, total이 0이 아니면 그냥 원래 배열을 부분배열로 간주하면 되므로 가능 (부분 배열의 개수는 possibly one!!!)

total이 0인 경우는 다시 처음부터 하나씩 더해가면서 앞부분의 합이 0이 아닐때까지 진행하면 뒷부분의 합은 total-앞부분이므로 당연히 0이 아니게 되어서 이렇게 앞부분/뒷부분으로 항상 2개 부분배열로 나눌 수 있다.

이게 불가능하면 어떻게해도 불가능함! (아마 0 0 0 ... 인 경우)



B. Ilya and tic-tac-toe game

틱택토 게임에서 x가 이번 턴에 x표시를 추가해서 승리할 수 있는지 여부를 출력하는 문제.

틱택토 게임 룰만 제대로 알면 그냥 if문 노가다 문제인듯... 예쁘게 풀기 귀찮아서 그냥 무식하게 풀었다ㅜㅜ



C. Vladik and chat

나름 풀이랑 다 생각해서 풀고있었는데 A번 Hack당한거에 멘붕당해서 C번 마무리를 못하고 2시간이 끝나버렸다.

대회 끝나고 남은부분 정리해서 제출했더니 Accepted 떠서 괜히 슬펐음 (ㅠㅠ)

user가 일부 ?로 가려진 채팅내용에서 ?에 가능한 user를 규칙에 맞게 매칭시키는 것 (불가능한 경우 impossible)

규칙1. user는 대화내용(text)에 본인을 언급할 수 없다. (text에 자신의 username이 단어로 들어있으면 안됨)

규칙2. 한 user가 연속해서 말할 수 없다.

의식의 흐름대로 코드를 짜다보니 너무 길고 장황한 코드가 되어버린듯...

일단 text를 word 단위로 잘라서 어떤 username이 언급되었는지 체크를 해야한다.

이 때 사용할 수 있도록 미리 HashMap으로 username-index를 저장해 놓아야 하고...

언급된 것이나 위아래 message의 user를 제외하고 현재 ?에 들어올 수 있는 user가 누구이고 경우의 수(possibleCnt)가 몇개나 되는지 계속 기록을 해서 업데이트해나간다. possibleCnt가 0인 경우는 impossible로 처리하고 바로 다음 chat으로 넘어가고, 1인 경우는 그 1에 해당하는 user로 ?를 확정시킨다음 주변(위아래) 정보를 업데이트한다. 이과정을 계속 반복하다가, 모든 ?에 대해 possibleCnt>=2가 되면 가장 위의 ?부터 가능한 아무 user로 확정시키고 아래 정보를 업데이트하면서 내려오면 마지막 ?까지 규칙에 위배되지 않고 다 채워나갈 수 있다.

... 내가 썼지만 무슨 소린지... ㅠㅠ

아무튼 Java의 String 관련 API도 몇개 썼고 HashMap도 썼고... 최근에는 c++로 문제를 풀려고 노력하는 와중이었는데 아무래도 코드포스는 시간에 쫓기다보니 원래 익숙한 자바를 쓰게된다. 나중에 c++로 다시 풀어볼 수 있을까...



D. Fedor and coupons

미제출



E. Dasha and cyclic table

미제출





Final Standings

Rank

Points

Extras

A

500

B

1000

C

1500

D

2000

E

2500

1886

864

-

-2

864

00:34


C번 푼사람 300명도 안되었던데 정신차리고 시간안에 풀었으면 순위가 꽤 올라갔을듯...! (이런말 해봤자 뭐하나)

못 푼 문제 맨날 본다본다하고 시간지나면 손도 안대니 실력이 늘지를 않는듯 휴



Rating Changes

Rank

Points

Rating

1886

864

1740 → 1663 (-77)


꾸준히 해서 감을 잃지 않도록 해야지 이러다가 파란색도 잃어버리겠다 ㅜㅜ



※ 링크 : 대회공지 / 출제자해설


'알고리즘 > Codeforces' 카테고리의 다른 글

Codeforces Round #478 (Div. 2)  (0) 2018.05.02
Codeforces Magic! New Year Gift  (0) 2017.01.10
Codeforces Round #375 (Div. 2)  (0) 2016.10.06
Codeforces Round #374 (Div. 2)  (0) 2016.10.03
Codeforces Round #373 (Div. 2)  (0) 2016.09.30
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함