안녕하세요, 배열 알고리즘 및 C 언어 코드 관련 질문이 있어 글 남겨 드립니다.
질문할 내용은 L(행의 시작)과 E(행의 끝)입니다.
1. 알고리즘
L : (COL+1)-J
E : J+(COL-1)
2. C언어 코드
L : COL-(J+1)
해설 : 열에서 행의 시작 위치는 열이 증가할 때마다 증가한 열의 수만큼 줄어 들어 "COL-J"가 되어야 하지만 배열의 위치가 0부터 시작하기 때문에 "COL-(J+1)이 된다.
E : (J-1)+COL
해설 : 행의 끝 위치는 회전수를 나타내는 열번호에 일정한 크기(열의 크기보다 1 작은 크기)가 더해져야 하지만 배열의 위치가 0부터 시작하기 때문에 회전 수를 나타내는 (열번호-1)에 열의 크기가 더해진 (J-1)+COL이 된다.
두 경우 모두 실제 디버깅을 통해 값이 도출되는 것을 알 수는 있으나, 해당 부분이 빈칸으로 나왔을 경우 답을 찾는 과정이 이해가 되지 않습니다.
우선 알고리즘을 알고 있다고 생각하고 C언어 코딩으로 갔을 때, COL-1=COL과 같기 때문에
L =(COL-1+1)-J=COL-J이 되고, 여기서 배열의 위치가 0부터 이므로 L : COL-(J+1)이 된다.
E또한 E =J+(COL-1-1)이 되어 J+(COL-2)가 되고 배열의 위치가 0부터 이므로 J+1+(COL-2)이 되어 (J-1)+COL
위와 같이 푸는 것이 맞는 것이 아니라면, 어떤 식으로 도출하는 것인 지 설명 부탁 드리겠습니다.
안녕하세요 길벗수험서 운영팀입니다.
먼저 회원님의 문제 해결방법 또한 정답임을 알려드립니다.
다만 너무 순서도에 치중하여 해석하고 계신 것 같아 보입니다.
이러한 문제의 경우, 순서도를 떠나 배열 변수의 값 변화와, 변수 k가 배열에 삽입되는 시점의 각 배열 위치값을 함께 두고 비교하면 생각보다 쉽게 구할 수 있습니다.
해당 알고리즘은 배열의 좌측에서 우측으로 진행되는 4회를 for(j)문으로 구성하고, 시작위치(L)와 끝위치(e)를 구해 k를 삽입합니다.
j가 0부터 삽입되니 각 반복에서 배열은 다음과 같은 위치에 값이 삽입되겠네요.
1회 - j=0 : L=3, e=3
2회 - j=1 : L=2, e=4
3회 - j=2 : L=1, e=5
4회 - j=3 : L=0, e=6
위의 값 변화는 아래와 같이 바꾸어 볼 수 있습니다.
1회 - j=0 : L=3, e=3
2회 - j=1 : L=3-1, e=3+1
3회 - j=2 : L=3-2, e=3+2
4회 - j=3 : L=3-3, e=3+3
위에서 L과 e는 중간값 3을 기준으로 감소, 증가 하는 값이라고 알 수 있죠.
중간값은 행의 -1이 되겠네요. 열이 구할 때 '행*2-1'을 수행했으니까요.
그렇다면 중간값은 col-1, 증감되는 값은 배열 변수는 j를 활용하면 되겠네요.
L=(col-1)-j
e=(col-1)+j
이렇게 답이 도출되네요.
(교재와 형태만 다를 분 같은 식입니다.)
행복한 하루되세요 :)
-
관리자2019-08-22 14:30:27
안녕하세요 길벗수험서 운영팀입니다.
먼저 회원님의 문제 해결방법 또한 정답임을 알려드립니다.
다만 너무 순서도에 치중하여 해석하고 계신 것 같아 보입니다.
이러한 문제의 경우, 순서도를 떠나 배열 변수의 값 변화와, 변수 k가 배열에 삽입되는 시점의 각 배열 위치값을 함께 두고 비교하면 생각보다 쉽게 구할 수 있습니다.
해당 알고리즘은 배열의 좌측에서 우측으로 진행되는 4회를 for(j)문으로 구성하고, 시작위치(L)와 끝위치(e)를 구해 k를 삽입합니다.
j가 0부터 삽입되니 각 반복에서 배열은 다음과 같은 위치에 값이 삽입되겠네요.
1회 - j=0 : L=3, e=3
2회 - j=1 : L=2, e=4
3회 - j=2 : L=1, e=5
4회 - j=3 : L=0, e=6
위의 값 변화는 아래와 같이 바꾸어 볼 수 있습니다.
1회 - j=0 : L=3, e=3
2회 - j=1 : L=3-1, e=3+1
3회 - j=2 : L=3-2, e=3+2
4회 - j=3 : L=3-3, e=3+3
위에서 L과 e는 중간값 3을 기준으로 감소, 증가 하는 값이라고 알 수 있죠.
중간값은 행의 -1이 되겠네요. 열이 구할 때 '행*2-1'을 수행했으니까요.
그렇다면 중간값은 col-1, 증감되는 값은 배열 변수는 j를 활용하면 되겠네요.
L=(col-1)-j
e=(col-1)+j
이렇게 답이 도출되네요.
(교재와 형태만 다를 분 같은 식입니다.)
행복한 하루되세요 :)