원판 돌리기
문제에서 주어진 조건들을 구현하면 되는 문제다.
틀린 이유
x[i] 배수에 해당하는 원판에 대해서만 처리해줘야하는떼 이 부분을 빼먹었을 뿐더러, 뒤늦게 알았지만 처리하지 못했음.⭐️ =>행은 원판을 의미하므로, i-for문에서 각 행(원판)에 대해 연산을 반복할 때, 반복 변수 i의 증가식을 i+=x[i]로 해주면된다!
j번째 숫잔는 0번째와 M-1번째가 인접해있기 때문에, 인접해 있는 숫자가 같은지 비교할 때 이 부분을 처리해줘야함!⭐️ if(j == 0 && Map[i][j] == Map[i][M-1]) if(j== M-1 && Map[i][j] == Map[i][0])
숫자가 같은지 검사하고, 같다면 삭제처리, 같지 않다면 평균 값에 따라 증감시킨다. => 원래 배열 값을 비교하면서 동시에 변형시키기 때문에 배열을 하나 더 생성하여(Map2), 기존의 배열Map 값으로 비교하되, 새로 생성한 배열에 값을 변경시켜주고, 작업이 다 끝난고 난 후에 Map에 Map2를 넣어준다!
같은 숫자가 없을 때, 평균 구할 때 double 타입으로 평균을 저장한다. 평균 = 합/갯수이다. 합과 갯수는 int형에 저장해도된다. 하지만 double 타입의 평균을 구할 땐, int형 결과값인 합/갯수에 1.0을 곱함으로써 쉽게 double로 형변환할 수 있다!
2번째 풀었을 때 틀린 이유
조건2에서 평균보다 작은 값을 갖는 Map[i][j] 을 1 감소시켜야하는데, 이때 값이 없는 경우, 배열 값이 0이기 때문에, 이 경우는 Map[i][j] == 0인 경우로서, 예외처리로 continue해야한다!
2차원 배열을 순회함과 동시에 값 변형이 일어나므로 2차원 배열을 하나 더 생성해서 값을 복사하여 사용하는데, Map2 배열 값을 변형시켜야하는데 중간에 원본 Map에 값을 변형시켜버려서 틀렸다!
System.arraycopy 사용법!⭐️⭐️⭐️⭐️⭐️ 배열A를 배열B에 복사할 때! ( ① , ② , ③ , ④ , ⑤ ) ① 배열 A ② A 어디부터 읽을 것인지 인덱스 ③ 배열 B ④ B 어디부터 쓸 것인지 인덱스 ⑤ A->B로 복사할 데이터 길이 =>문법은 맞았지만, 2차원 배열에 대해서 사용할 때는 각 행마다 반복해주어야한다.⭐️⭐️⭐️⭐️⭐️ arraycopy는 1차원 배열 단위로 수행하는 것 같았다.
Last updated