발상이 잘못된걸까요? 방법이 잘못된걸까요?(요점만 다시 찝어왔어요!)

조회수 646회

아래 그림처럼 img_3의 행렬이 있다면 가장 상위 행에서 아래로 내려가는데 내려갈땐 +-1의 범위로 내려가도록 설정했어요. 대신 내려가면서 그 범위에서 가장 최소가 되는 부분을 골라서 내려가게 했구요! 그런데 알고리즘이 생각대로 돌아가질 않네요..

최소값을 찾는데 문제가 있는걸까요..?

이미지

//////////////////////////////////////이전 값들 정리후//////////////////////////////////////////////

int ssd = 0; //최종으로 선택할 값

int* ssdd = new int[y]; //1행의 각 열마다 출발하여 y-1까지의 줄기내용을 저장한다

for (int i = 0; i < y; i++) { //줄기 내용의 초기화
    ssdd[i] = 0;
}



for (int i = 0; i < y; i++) {

    int col = i; //이전에 택한 행의 열값

    int min = 100000; //최소값을 찾기 위해서

    int im = 0;// 열값을 임시 저장할 공간

    ssdd[i] += img_3[0][i]; //첫번째 행에서 각 열값을 미리 저장

    for (int w = 1; w < x; w++) { //두번째 행부터 검사를 시작

        if (col == 0) { //이전에 택한 열이 최좌측일때

            for (int z = col; z <= col + 1; z++) {

                if (img_3[w][z] < min) {
                    min = img_3[w][z];
                    im = z;
                }
            }
            col = im;
            ssdd[i] += img_3[w][col];
            continue;

        }

        if (col == y - 1) { //이전에 택한 열이 최우측 일때

            for (int z = col - 1; z <= col; z++) {
                if (img_3[w][z] < min) {
                    min = img_3[w][z];
                }
                im = z;
            }

            col = im;
            ssdd[i] += img_3[w][col];
            continue;

        }


        for (int z = col - 1; z <= col + 1; z++) { //저스트 중간일때

            if (img_3[w][z] < min) {
                min = img_3[w][z];
            }
            im = z;

        }

        col = im;
        ssdd[i] += img_3[w][col];

    }

}


for (int i = 0; i < y; i++) { //임시 확인용
    cout << ssdd[i] << "    ";
}


ssd = ssdd[0];
for (int i = 1; i < y; i++) { //최소값 찾기
    if (ssdd[i] < ssd) {
        ssd = ssdd[i];
    }
}




delete[]ssdd; //반환
  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 고민끝에 해결했어요! 시간이 지나면 삭제하도록 하겠슴다!

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 기왕 질문 올려주신 거 자답이라도 적어 주세요. 엽토군 2021.4.23 16:57

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)