'알고리즘 > 멤고리즘' 카테고리의 다른 글
멤고리즘 5회 1번, 멤고리즘 랭킹(정렬) (0) | 2014.05.10 |
---|---|
멤고리즘 4회 3번. 운영자의 사탕 (DP) (0) | 2014.04.22 |
멤고리즘 4회 1번. 먹보 영훈이2 (칼로리 계산) (0) | 2014.04.22 |
멤고리즘 3회 3번. 술잔 나누기 (0) | 2014.04.22 |
멤고리즘 3회 2번. 색종이(피자) 쪼개기 (0) | 2014.04.22 |
멤고리즘 5회 1번, 멤고리즘 랭킹(정렬) (0) | 2014.05.10 |
---|---|
멤고리즘 4회 3번. 운영자의 사탕 (DP) (0) | 2014.04.22 |
멤고리즘 4회 1번. 먹보 영훈이2 (칼로리 계산) (0) | 2014.04.22 |
멤고리즘 3회 3번. 술잔 나누기 (0) | 2014.04.22 |
멤고리즘 3회 2번. 색종이(피자) 쪼개기 (0) | 2014.04.22 |
멤고리즘 4회 3번. 운영자의 사탕 (DP) (0) | 2014.04.22 |
---|---|
멤고리즘 4회 2번. 규민이는 유성온천 부자 (재귀, BFS) (0) | 2014.04.22 |
멤고리즘 3회 3번. 술잔 나누기 (0) | 2014.04.22 |
멤고리즘 3회 2번. 색종이(피자) 쪼개기 (0) | 2014.04.22 |
멤고리즘 3회 1번. 오목 (재귀) (0) | 2014.04.22 |
멤고리즘 4회 2번. 규민이는 유성온천 부자 (재귀, BFS) (0) | 2014.04.22 |
---|---|
멤고리즘 4회 1번. 먹보 영훈이2 (칼로리 계산) (0) | 2014.04.22 |
멤고리즘 3회 2번. 색종이(피자) 쪼개기 (0) | 2014.04.22 |
멤고리즘 3회 1번. 오목 (재귀) (0) | 2014.04.22 |
멤고리즘 2회 3번. 산삼 찾기(DP) (0) | 2014.04.22 |
아래 그림 1 과 같이 여러개의 정사각형칸들로 이루어진 정사각형 모양의 종이가 주어져 있고, 각 정사각형칸들은 하얀색으로 칠해져 있거나 핑크색으로 칠해져 있다. 주어진 종이를 일정한 규칙에 따라 잘라서 다양한 크기를 가진 정사각형 모양의 하얀색 또는 핑크색 색종이를 만들려고 한다.
전체 종이의 크기가 N * N (N = 2k,k 는 1 이상 7 이하의 자연수)이라면 종이를 자르는 규칙은 다음과 같다.
전체종이가 모두 같은 색으로 칠해져 있지 않으면 가로와 세로로 중간부분을 잘라서 그림 2 의 I,II,III,IV 와 같이 똑같은 크기의 네개의 (N/2) * (N/2) 색종이로 나눈다. 나누어진 종이 I,II,III,IV 각각에 대해서도 앞에서와 마찬가지로 모두 같은 색으로 칠해져 있지 않으면 같은 방법으로 똑같은 크기의 네 개의 색종이로 나눈다. 이와 같은 과정으로 잘라진 종이가 모두 하얀색 또는 모두 핑크색으로 칠해져 있거나, 하나의 정사각형 칸이 되어 더 이상 자를 수 없을 때까지 반복한다.
위와 같은 규칙에 따라 잘랐을 때 <그림 3> 은 <그림 1> 의 종이를 처음 나눈 상태를, <그림 5>는 최종적으로 만들어진 다양한 크기의 9 장의 하얀색 색종이와 7 장의 핑크색 색종이를 보여주고 있다.
입력으로 주어진 종이의 한 변의 길이 N 과 각 정삭각형의 칸(하얀색 또는 핑크색)이 주어질 때 잘라신 하얀색 색종이와 핑크색 색종이의 개수를 구하는 프로그램을 작성하시오.
입력 8 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 출력 9 7
출처:koi 중등기출
멤고리즘 4회 1번. 먹보 영훈이2 (칼로리 계산) (0) | 2014.04.22 |
---|---|
멤고리즘 3회 3번. 술잔 나누기 (0) | 2014.04.22 |
멤고리즘 3회 1번. 오목 (재귀) (0) | 2014.04.22 |
멤고리즘 2회 3번. 산삼 찾기(DP) (0) | 2014.04.22 |
멤고리즘 2회 2번. 이진회귀수 (0) | 2014.04.22 |
[문제 풀이]
일반적으로 모두가 알고 있는 오목과 같은 룰이다.
오목은 어느 방향으로든 같은 색의 돌이 연속으로 5개가 놓이면 승리하는 게임이다.
가로로 놓일 경우 제일 왼쪽의 돌을, 대각선으로 놓일 경우 제일 위쪽의 돌을 기준으로 연속인지 확인한다.
다만, 주의할 점은 연속으로 6개가 놓이면 이긴것이 아니다. (아래에서는 이런 경우를 6돌이라 부르겠다.)
[소스코드 풀이]
x와 y의 좌표가 (0, 0) 이 아닌 (1, 1)부터 시작하게 하기 위해서 처음 map을 선언할 때 MAX+1을 해주고 0으로 초기화하였다.
- bool 타입의 chk 함수
x, y : 좌표
d : 방향
count : 개수
color : 선택한 색깔
일단, 처음에 맵의 크기를 넘어서는지를 확인하면서 6돌인지를 확인한다.
그리고 다음 돌이 현재 선택된 돌과 같은색인지를 체크하는 if문을 만들었다.
여기서 d의 경우 한 시부터 시계 방향으로 각 각 1~4의 방향이고 이 외의 것을 0으로 생각한다.
1~4 이외의 방향인 0의 경우 각 방향별로 반대 방향에 돌이 있는지를 확인하는 case 0: 을 작성합니다.
그리고 재귀로 chk함수를 계속 돌면서 count가 늘어나게 되는데
6목의 경우 이긴경우가 아니라고 했는데 count가 6일 경우에 true를 줬을까요?
그건 바로 count가 6까지 증가를 하고 chk()에 들어왔을 때에 5개의 돌이 연속인 것이 확인 되어 있기 때문이다.
주의!
우리가 일반적으로 수학에서 배운 좌표계와 배열에서 사용하는 좌표계는 다릅니다!
밑에 표에서 보시는 바와 같이 오른쪽과 아래쪽으로 갈수록 크기가 커집니다.
y / x | 0 | 1 | 2 |
0 | 0 | 0 | 1 |
1 | 1 | 2 | 1 |
2 | 3 | 1 | 0 |
멤고리즘 3회 3번. 술잔 나누기 (0) | 2014.04.22 |
---|---|
멤고리즘 3회 2번. 색종이(피자) 쪼개기 (0) | 2014.04.22 |
멤고리즘 2회 3번. 산삼 찾기(DP) (0) | 2014.04.22 |
멤고리즘 2회 2번. 이진회귀수 (0) | 2014.04.22 |
멤고리즘 2회 1번. 거꾸로 말해요 (0) | 2014.04.22 |
[문제 설명]
(이런 문제의 경우, 손으로 직접 예제를 풀어보면서 문제를 이해하시는 게 제일 도움이 됩니다.)
문제에서 오른쪽 또는 아래쪽으로만 움직일 수 있고, 움직이면서 최대한 많이 산삼을 먹는게 목표인데요.
즉, 오른쪽 또는 아래쪽으로 이동해보면서 1을 가장 많이 지나는 경우를 찾으시면 됩니다.
[소스코드 설명]
저같은 경우 배열을 (1, 1)부터 사용을 하기 위해서 배열 사이즈를 하나 더 늘려주고, 처음에{0, 0}으로 초기화를 하였습니다. 이렇게 하시면은 비교를 할 때 맵의 크기를 넘어가는 경우에 대해서도 예외처리를 안해도 되기 때문에 매우 편합니다.
제가 짠 코드를 디버깅 돌려보면 다음과 같은 결과가 나옵니다.
0 |
1 |
2 |
3 |
4 |
5 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
2 |
2 |
0 |
0 |
1 |
2 |
2 |
2 |
3 |
0 |
1 |
1 |
3 |
4 |
4 |
4 |
0 |
2 |
3 |
3 |
5 |
5 |
5 |
0 |
3 |
3 |
3 |
5 |
6 |
멤고리즘 3회 2번. 색종이(피자) 쪼개기 (0) | 2014.04.22 |
---|---|
멤고리즘 3회 1번. 오목 (재귀) (0) | 2014.04.22 |
멤고리즘 2회 2번. 이진회귀수 (0) | 2014.04.22 |
멤고리즘 2회 1번. 거꾸로 말해요 (0) | 2014.04.22 |
멤고리즘 1회 3번. 복붙기능 키보드 (0) | 2014.04.22 |
[문제 설명]
2진수의 중간을 기점으로 양쪽을 비교하여 좌우 대칭을 이루는 수를 이진회귀수라고 부릅니다.
예를들어 11011, 101010101도 이진회귀수겠죠?
이번 문제에서는 입력으로 두 개의 숫자가 들어오게 되고, 그 숫자사이의 이진회귀수를 찾는 문제입니다.
입출력으로는 2진수가 아닌 10진수로 나타내야하는 것을 알아두셔야 합니다.
[소스코드 설명]
저같은 경우, 일단 while문을 돌면서 각 숫자를 2진수로 바꿔주었습니다.
그 후 2진수 문자의 길이의 절반만큼 for문을 돌면서 앞과 뒤를 비교하였습니다.
이 때 check라는 flag를 두어서 앞과 뒤가 같지 않을경우 check=0을 줘서 이진회귀수가 아님을 체크하였습니다.
멤고리즘 3회 1번. 오목 (재귀) (0) | 2014.04.22 |
---|---|
멤고리즘 2회 3번. 산삼 찾기(DP) (0) | 2014.04.22 |
멤고리즘 2회 1번. 거꾸로 말해요 (0) | 2014.04.22 |
멤고리즘 1회 3번. 복붙기능 키보드 (0) | 2014.04.22 |
멤고리즘 1회 2번. MemberNumber (0) | 2014.04.22 |
[문제 풀이]
입력하는 문자를 순서는 제외하고, 문자 자체를 거꾸로 출력(역순)하면 되는 간단한 문제입니다.
멤고리즘 2회 3번. 산삼 찾기(DP) (0) | 2014.04.22 |
---|---|
멤고리즘 2회 2번. 이진회귀수 (0) | 2014.04.22 |
멤고리즘 1회 3번. 복붙기능 키보드 (0) | 2014.04.22 |
멤고리즘 1회 2번. MemberNumber (0) | 2014.04.22 |
멤고리즘 1회 1번. CAT 출력 (0) | 2014.04.22 |
[소스코드 설명]
멤고리즘 2회 3번. 산삼 찾기(DP) (0) | 2014.04.22 |
---|---|
멤고리즘 2회 2번. 이진회귀수 (0) | 2014.04.22 |
멤고리즘 2회 1번. 거꾸로 말해요 (0) | 2014.04.22 |
멤고리즘 1회 2번. MemberNumber (0) | 2014.04.22 |
멤고리즘 1회 1번. CAT 출력 (0) | 2014.04.22 |
멤고리즘 2회 3번. 산삼 찾기(DP) (0) | 2014.04.22 |
---|---|
멤고리즘 2회 2번. 이진회귀수 (0) | 2014.04.22 |
멤고리즘 2회 1번. 거꾸로 말해요 (0) | 2014.04.22 |
멤고리즘 1회 3번. 복붙기능 키보드 (0) | 2014.04.22 |
멤고리즘 1회 1번. CAT 출력 (0) | 2014.04.22 |