https://www.acmicpc.net/contest/view/116

 

2015 ACM-ICPC 연습

 

www.acmicpc.net

오늘은 저번 주에 풀던 [꿍의 여친 만들기] 문제를 해결하고, [Virus] 문제를 시도했습니다.

 

[꿍의 여친 만들기]는 여성의 이상형 리스트를 받아 그 중 가장 성취하기 쉬운 매력도에 대한 cost를 구하는 문제입니다.

풀이 자체는 어렵지 않습니다.

이상형들 중 가장 얻기 힘든 매력의 cost들을 비교하여 가장 낮은 것을 출력하면 됩니다.

하지만 입력받은 data를 가공하는 작업이 다른 문제들에 비해 난이도나 양이 조금 높았습니다.

그 부분에서 저번 주에 문제가 있었고, 이번주에도 많은 시간을 낭비하였습니다.

 

또한 StringStream 초기화 부분에서 문제가 발생하기도 했습니다.

여러 객체를 생성하지 않고 하나의 StringStream 객체를 생성해서 사용하는데, 

StringStream 객체를 clear 하거나 flush 해도 안의 내용이 남아 있었습니다.

이에 대해 해결 방안을 찾다가 다음 블로그에서 해답을 찾았습니다,

http://egloos.zum.com/mcchae/v/11130705

 

[C++] std::ostringstream 의 clear 문제

요즘에는 주로 Python을 이용하고, 부로 C나 C++을 이용하는 경우가 많습니다. 이번에는 C++에서 ostringstream 을 이용하다가 발생한 문제를 어느 분께서는 시행착오 하시지 말라고 정리해 봅니다. std::ostringstream는 어떤 때 사용하는게 좋을까요? 다음과 같은 경우에 좋습니다. 어느 자료를 계속해서 메모리 스트림에 넣었다

egloos.zum.com

"Clear 함수는 안의 내용을 실질적으로 지우지 않고 rdbuf라는 플래그만 0으로 초기화 한다"는 내용입니다.

이를 해결하기 위해서는 stringstream 안에 담긴 string을 blank string으로 덮어씌워주고,

rdbuf를 초기화 하여 앞에서부터 다시 담을 수 있도록 해야합니다.

 

오늘 해결하다가 만 [Virus]는 생화학폭탄의 폭파까지 걸리는 시간을 출력하는 문제입니다.

폭탄 안에는 N개의 바이러스가 있고, 각 바이러스는 N개 미만의 바이러스와 1개의 성분을 생성하며 자가분해합니다.

이 중 중성자(정확히는 삼중수소)의 갯수가 한도를 넘어가면 폭탄이 폭파합니다.

 

이 문제는 입력 받은 데이터를 정리하고, 대략적인 문제 푸는 방식을 세우는 것까지 완료하였습니다.

주어진 바이러스 공식을 하나씩 적용하면서 조건을 맞춰보면 될 것으로 예상합니다.

몇가지 걱정거리가 있다면, 입력된 바이러스의 변이가 일관적이지 못해 한번 정리를 해야 한다는 점.

바이러스 중 발생하지 않는 바이러스가 존재 할 수 있다는 점.

순환 발생 체크나 폭탄이 폭파하지 않는 조건 판단 등.

 

그리고 영어 문제라서 문제 해석이 느린 점도 앞으로의 개선 사항이라 생각합니다.

문제를 풀면서 독해 능력이 조금은 늘었으면 싶습니다.

'개발일지 > Algorithm' 카테고리의 다른 글

20.06.02 2015 ACM-ICPC 연습  (0) 2020.06.02
20.05.26 - 2015 ACM-ICPC 연습  (0) 2020.05.26
20.05.19 - 2015 ACM-ICPC 연습  (0) 2020.05.19
20.05.05 - 2015 ACM-ICPC 연습  (0) 2020.05.05
알고리즘 일지입니다.  (0) 2020.05.01

오늘은 늦잠을 자기도 했고, 최근 체중 감량을 위해 운동 시간을 늘리기도 했고,

컨디션도 안좋아서 늦게까지 해서야 겨우 할당량을 채웠습니다.

 

오늘은 Interaction 상에서 Character가 Flying 상태로 움직이도록 해보았습니다.

 

하는 과정에서 하나의 함수로 처리 했던 Climb Trigger 초기화 함수와 각 Trigger에 대한 overlap 이벤트들이

각자 다른 작업을 해야 복잡하게 이루어져야 한다는 점을 깨달았습니다.

 

이전에 작성해놓았던 트리거 작동 방식을 보면 알 수 있었지만,
이전 코드를 지우면서 새 코드를 넣는 복잡한 과정에서 인지를 못한 것 같습니다.

 

그래서 이 부분을 각기 다른 코드들로 분리를 하고, 동작을 확인했습니다.

 

그리고 Interaction 상 Climb 상태로의 변화는 생각한 것은 구현 하였으나, 
의도한대로 움직이지 않았습니다.

좌우 이동을 막고, 전후 이동은 상하이동으로 해놓았으나 정상적으로 작동하지 않았습니다.

어쩌면 중력이 적용 했을수도 있고, 코드가 빌드가 꼬여서 적용이 안된 것일 수도 있을 것 같습니다.

 

좀 더 이 부분은 시도를 해봐야 할 것 같습니다.

 

번외로 오늘 몇몇 Customized Log Category를 수정 하였는데 코드가 문제 없이 잘 작동하였습니다.

그래서 위 작업을 마무리 하고 commit 한 뒤, Log Category 수정을 해보았습니다.

그 결과 정상적으로 작동을 하여, 뒤로 미루었던 작업 중 하나은 Log 정리를 완료하였습니다.

 

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.05.14 개발일지  (0) 2020.05.14
20.05.13 개발일지  (0) 2020.05.13
20.05.09 개발일지  (0) 2020.05.09
20.05.07 개발일지  (0) 2020.05.07
20.05.06 개발일지  (0) 2020.05.06

오늘은 Climb를 판단하는데 사용되는 3개의 Trigger의 Start/End Overlap 시 호출되는 함수의 내용물을 채워넣고,
이전 Climb 구현에서 사용 했던 불필요한 함수나 변수들을 일부 제거하였습니다.

 

처음에는 호출되는 함수에서 상호작용되는 Climb에 따라 MovementMode를 변경해 주었습니다.

하지만 테스트를 해보니, 사다리 근처에 닿기만 해도 사다리를 타는 모양세가 되었습니다.

 

그래서 MovementMode 값은 상호작용쪽에서 수정하도록 주석으로만 처리를 하고, 
Overlap 함수에서는 어떤 Climb와 상호작용이 가능한지 저장하는 변수와, ClimbTrigger만 영향을 받도록 하였습니다.

 

이 과정에서 3개로 분리되어 있던 Overlap 함수는 다시 하나로 합쳐졌고, 
기능을 테스트 한 뒤 이전에 Climb를 구현하다가 실패했을 때 사용했던 함수, 변수들을 삭제하였습니다.

 

그리고 Climb가 Rope, Ladder, Wall이 있었는데,
Wall은 Trap에서 MovementComponent 적용을 하면서 구현을 해두었습니다.

그러다보니 Wall은 THObjectBase 하위 클래스이고, Rope, Ladder는 THClimbBase의 하위 클래스로 구현되어 있습니다.

오늘 확인해본 결과 THWallBase와 THClimbBase이 구현상 충돌나는 부분이 없어
THWallBase를 THClimbBase의 하위 클래스로 변경하였습니다.

이를 통해 상호작용 가능한 Climb 값을 저장하는 것이 일관성 있어졌습니다.

 

월요일에는 상호작용 시 Climb가 가능한 상태로 만들려고 합니다.

아마 이동 자체를 하루만에 구현할수는 없겠지만, 등반 상태로의 변화와 해제는 구현할 것으로 예상합니다.

 

원래는 5월 말까지 느긋하게 구현하려 했으나, 최근 인턴쉽을 모집하는 회사가 있어 기한을 조금 당기려 합니다.

다음주 목요일까지 등반 기능을 구현한 뒤 조금 이르지만 기능 영상 촬영을 하고자 합니다.

그리고 이를 기반으로 포트폴리오를 개선하고, 지원서에 넣을 예정입니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.05.13 개발일지  (0) 2020.05.13
20.05.11 개발일지  (0) 2020.05.11
20.05.07 개발일지  (0) 2020.05.07
20.05.06 개발일지  (0) 2020.05.06
20.50.04 개발일지  (0) 2020.05.04

+ Recent posts