'2015/04/18'에 해당되는 글 4건

  1. 2015.04.18 더블릿_승리확률
  2. 2015.04.18 더블릿_좌우대칭산모양
  3. 2015.04.18 더블릿_ISBN
  4. 2015.04.18 더블릿_오 목

2차원 배열을 통한 재귀는 끝끝내 성공하지 못하고, 

1차원배열을 통한 완전탐색을 통해서 답을 도출해내었다.

어떻게든 답을 구해냈으니 된거지만 뭔가 찜찜한 마음이 든다. 

더 좋은 방법을 택한 것이 아니라, 내가 구현 할 수 있는 부분으로 구현해서인거 같다. 


처음에 생각한 방법은 이러했다.

각 팀을 인덱스로 가지는 배열을 만들어냈다.

총 여섯 가지

[1][2]    => 1팀이 2팀과 붙은 결과

[1][3]    => 1팀이 3팀과 붙은 결과

[1][4]

[2][3]

[2][4]

[3][4]

이런식으로 생각하고, 이미 결과가 나온 게임을 제외하고 

완전 탐색을 시도했다. 

이기거나, 지거나, 비기거나 3가지의 경우가 있으므로

3가지의 경우를 6가지

3 * 3 * 3 * 3 * 3 * 3가지의 총 경우가 나오는데,

이미 진행된 게임을 제외하면 이보다는 적게 된다. 


이렇게 경우의 수가 만들어 질 때마다 

각 점수를 계산해준다. 

그리고 나의 팀이 가장 높은 점수를 기록한 경우에는 카운트를 증가시켜

최종적인 답을 구했다. 



'알고리즘문제풀이' 카테고리의 다른 글

더블릿_도망 간 소를 잡아라  (0) 2015.04.20
더블릿_선분상의 점  (0) 2015.04.20
더블릿_좌우대칭산모양  (0) 2015.04.18
더블릿_ISBN  (0) 2015.04.18
더블릿_오 목  (0) 2015.04.18
Posted by slender ankles
,
탄이가 말해준 재귀의 진정한 목적은 분할과 정복이라는 말을 몸소 경험한 문제였다.

짬처리?의 좋은 예라고 생각한다. 

문제를 간단히 정리하자면 

산봉우리 모양은 좌우 각 숫자마다 좌우대칭을 이루게 되는데

예를 들어

1 이면 1

2 이면 121

3 이면 1213121

4이면 121312141213121

과 같은 형태로 나누어지게 된다. 

처음에는 어떻게 풀어야 될 지 굉장히 당황했다. 


그러던 중 재귀에 대해서 고민해보게 되었고, 

이러한 형태로 설계해놓으면 답이 나오지 않을까 생각했다. 

(나보다 하나 더 작은 놈에게 짬 처리) - 나의 숫자를 출력 - (나보다 하나 더 작은 놈에게 짬 처리)

이러헥 하면 

1 2 1 도=> (나보다 하나 더 작은 놈에게 짬 처리) - 나의 숫자를 출력 - (나보다 하나 더 작은 놈에게 짬 처리)

이런 식으로 설계 할 수 있을 것  같았다. 

답은 제대로 나왔다. 

할 만 했던 문제



'알고리즘문제풀이' 카테고리의 다른 글

더블릿_선분상의 점  (0) 2015.04.20
더블릿_승리확률  (0) 2015.04.18
더블릿_ISBN  (0) 2015.04.18
더블릿_오 목  (0) 2015.04.18
더블릿_골드바하의 추측  (0) 2015.04.17
Posted by slender ankles
,

문제를 제대로 읽고 답하면 어렵지 않게 풀 수 있는 문제였다. 

책의 ISBN은 10자리수로 구성되는데 

1~9번째 자리까지는 0~9의 수들로 이루어져있고

10번째 자리는 0~10(10은 X로 표현됨)으로 이루어져 있다. 

입력 받은 수에 ?가 끼어있는데 이 물음표를 구하는 문제였다. 


우선 캐릭터 배열보다는 INT형이 관리하기 쉬웠으므로 INT형으로 바꿔주어 입력 받고, 

물음표는 -1로 배열에 저장하였다. 


규칙에 맞게 각 자리수를 더해서 SUM을 만들고, 

물음표가 들어온 자리의 인덱스를 저장해두었다가

순회하며

SUM + (물음표자리수에 해당 하는 숫자 * 맞출숫자)   를 11로 나누어서 0이 되는 값을 찾았다. 


'알고리즘문제풀이' 카테고리의 다른 글

더블릿_승리확률  (0) 2015.04.18
더블릿_좌우대칭산모양  (0) 2015.04.18
더블릿_오 목  (0) 2015.04.18
더블릿_골드바하의 추측  (0) 2015.04.17
더블릿_색종이 올려놓기  (0) 2015.04.17
Posted by slender ankles
,

코딩 해줘야 할 것이 많지만 , 그리 어려운 문제는 아니었다. 

다만 구현하는데 시간이 좀 걸렸다. 이런 문제는 시간 싸움인 것 같다. 


문제에 대해서 간략히 정리하자면

19 * 19 배열을 오목판으로 생각하고 흰돌, 검은돌이 배열 위에 그려지게 되는데

지금 상황에서 흰돌이 이긴 것인지, 검은 돌이 이긴 것인지 판별한다. 알 수 없으면 0을 출력한다.

오목은 반드시 돌 5개가 나란히 놓여야지 이기는 것, 6개가 놓이면 이기는 것이 아니다. 

만약 돌 5개가 놓인 지점의 가장 끝 부분(좌우 라면 가장 좌, 상하라면 가장 상)의 좌표도 출력하라.


문제에 나온 조건 대로 코딩해줬다. 

코드는 100줄을 넘어가게 되었지만 나름대로 줄인다고 줄여봤는데 문제의 조건을 표현하는데만해도 꽤 많은 코드가 

필요하므로 당연한 것 같다. 

문제를 푸는데는 약 1시간 넘게 걸린 것 같다. 

중요한 조건이라고 생각되는 것은 오목에서 이기기 위해서는 반드시 돌 5개가 연결되어야만 한다는 것이다.

그래서 반드시 5개만 연결된 것만 답이라고 생각하고 구현했다. 5개 이상은 아니다!


처음부터 끝까지 접근방법은 

어느 한 돌을 만나면 

돌을 색깔을 인자로 가지는 재귀 호출을 하는 것이었다. 

방향은 

1) 좌우, 2) 상하, 3) 좌상우하 , 4)좌하우상

이렇게 크게 4가지의 단위로 검색을 하면 된다. 

그래서 맞으면 값을 도출하고, 재귀호출시에 가장 최소 좌표를 찾아놓으므로 맞춰서 같이 출력해주면 답이 나왔다.

하지만 더블릿에서 다른 사람의 맞춘 소스를 보고 느낀 것은 내 코드에 쓸데없는 조건들이 좀 많이 들어간 거 같다. ㅜㅜ 

담백한 코드를 짜고 싶었는데,,

'알고리즘문제풀이' 카테고리의 다른 글

더블릿_좌우대칭산모양  (0) 2015.04.18
더블릿_ISBN  (0) 2015.04.18
더블릿_골드바하의 추측  (0) 2015.04.17
더블릿_색종이 올려놓기  (0) 2015.04.17
더블릿_dna결합  (0) 2015.04.15
Posted by slender ankles
,