백준 17281 ⚾ 문제 코드/해설 (파이썬), 구현 문제, 삼성 A형 기출
으악 푸는데 엄청 오래걸렸다...ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 나.....삼성갈수있을까
문제 코드만 궁금한 분은 깃허브 링크 눌러주세요
문제 설명 ㄱㄱ
엄청 어려운 문제는 아닌데 ... 딱 봐도 구현이 귀찮아보여서 풀기가 영... 그런 문제이다.
문제 풀이 논리
결국 모두 탐색을 해야 하는 문제이다. 효율성 조건이 들어가있어서 (파이썬은 pypy3 기준으로 1.5초 이내) 풀기가 상당히 까다롭다. 우선 논리만 설명하자면, permutations를 사용해서 타자들의 가능한 순서를 모두 미리 만들어둔다. 그리고 각 순서에 대해서 게임을 끝까지 진행해보면서 그 중 가장 큰 결과값이 나오는 것을 골라서 출력하면 된다.
이 때 나같은 경우는 permutations를 0~7까지만 하고 4번째 타석만 0번째 타자를 넣는걸로 했는데 이러면 구현이 상당히 복잡하다. 인덱스 설정이 까다로워져서,, 다 풀고 다른사람 풀이를 보니까 permutations를 그냥 1~8까지 하고 4번째순서에 [0]을 추가하는 식으로 구현을 했더라. 난 왜 이렇게 안했지 ㅡㅡㅋㅋㅋㅋㅋㅋㅋ 바보 ㅠ..
아무튼 이 이후에도 점수를 처리할 때 for문을 쓰면 시간안에 풀 수가 없어서 이 부분을 변수 세개를 가지고 돌려 사용하는 식으로 활용해야한다. 이 부분은 한번 생각나면 쉽게 풀 수 있는데 생각해내기가 좀 귀찮다.
elif cur == 1:
tmp_ans += b2
b0, b1, b2 = 1, b0, b1 #1루타인 경우 b0, b1은 b1, b2로 이동, b0는 1 채워짐.
문제 없이 잘 풀린다. 1초가 걸림.
리플릿에서 풀고 나서 시간을 재봤을 때에는 10초 가까이 나오고 그랫어서 이렇게 푸는게 정말 맞나? 싶었는데 잘 풀린다. pypy3랑 python3 차이가 이정도로 큰가? 싶지만 뭐.. 평균을 내는 방식으로 시간을 재는건가 싶기도하고.
요새 코딩 연습을 좀 소홀히 한 것 같긴 하다. 문제가 안 풀린다. 날 잡고 다시 열심히 풀어봐야할듯.