2023. 10. 12. 14:58ใ์ธํ๋ฐ/์๋ฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์ ๋ฌธ : ์ฝ๋ฉํ ์คํธ ๋๋น
https://hyejin.tistory.com/1217
-> ์ด์ ๋ฌธ์ ํ์ด
10. ๋ด์ฐ๋ฆฌ
์ค๋ช
์ง๋ ์ ๋ณด๊ฐ N*N ๊ฒฉ์ํ์ ์ฃผ์ด์ง๋๋ค. ๊ฐ ๊ฒฉ์์๋ ๊ทธ ์ง์ญ์ ๋์ด๊ฐ ์ฐ์ฌ์์ต๋๋ค.
๊ฐ ๊ฒฉ์ํ์ ์ซ์ ์ค ์์ ์ ์ํ์ข์ฐ ์ซ์๋ณด๋ค ํฐ ์ซ์๋ ๋ด์ฐ๋ฆฌ ์ง์ญ์ ๋๋ค. ๋ด์ฐ๋ฆฌ ์ง์ญ์ด ๋ช ๊ฐ ์๋ ์ง ์์๋ด๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์.
๊ฒฉ์์ ๊ฐ์ฅ์๋ฆฌ๋ 0์ผ๋ก ์ด๊ธฐํ ๋์๋ค๊ณ ๊ฐ์ ํ๋ค.
๋ง์ฝ N=5 ์ด๊ณ , ๊ฒฉ์ํ์ ์ซ์๊ฐ ๋ค์๊ณผ ๊ฐ๋ค๋ฉด ๋ด์ฐ๋ฆฌ์ ๊ฐ์๋ 10๊ฐ์ ๋๋ค.
์ ๋ ฅ
์ฒซ ์ค์ ์์ฐ์ N์ด ์ฃผ์ด์ง๋ค.(2<=N<=50)
๋ ๋ฒ์งธ ์ค๋ถํฐ N์ค์ ๊ฑธ์ณ ๊ฐ ์ค์ N๊ฐ์ ์์ฐ์๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ์์ฐ์๋ 100์ ๋์ง ์๋๋ค.
์ถ๋ ฅ
๋ด์ฐ๋ฆฌ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ์ธ์.
์์ ์ ๋ ฅ 1
5
5 3 7 2 3
3 7 1 6 1
7 2 5 3 4
4 3 6 4 1
8 7 3 5 2
์์ ์ถ๋ ฅ 1
10
๋ฌธ์ ํ์ด 1
public int solution(int n, int[][] arr)
{
int answer = 0;
int[][] tmp = new int[n + 2][n + 2];
for (int i = 0; i < tmp.length; i++)
{
for (int j = 0; j < tmp[i].length; j++)
{
if (i == 0 || j == 0 || i == tmp.length - 1 || j == tmp.length - 1) {
tmp[i][j] = 0;
}else {
tmp[i][j] = arr[i - 1][j - 1];
}
}
}
for (int i = 0; i < tmp.length; i++)
{
for (int j = 0; j < tmp[i].length; j++)
{
if (!(i == 0 || j == 0 || i == tmp.length - 1 || j == tmp.length - 1))
{
if ((tmp[i][j] > tmp[i][j - 1]) && (tmp[i][j] > tmp[i - 1][j]) && (tmp[i][j] > tmp[i + 1][j]) && (tmp[i][j] > tmp[i][j + 1]))
{
answer++;
}
}
}
}
return answer;
}
๐ฉ๐ป : ๋๋.. ์ฐ์ ๋ฌธ์ ์์ ์ ์ํ ๊ทธ๋ฆผ์ฒ๋ผ tmp ๋ฐฐ์ด์ ํ๋ ๋ ๋ง๋ค์๋ค. ๋์ ๋ชจ๋ 0์ผ๋ก ์ด๊ธฐํํด์ฃผ๊ณ , ๊ทธ ์์ ๊ฐ์ arr์ ๋ฐฐ์ด ๊ฐ์ ๊ทธ๋๋ก ๋ฃ์ด์คฌ๋ค.
๊ทธ ๋ค์.. ๋์ ๋ถ๋ถ๋ค์ด ์๋๋ผ๋ฉด
if (!(i == 0 || j == 0 || i == tmp.length - 1 || j == tmp.length - 1))
tmp[i][j]์ ๊ฐ์ ๋์๋จ๋ถ์ผ๋ก ๋น๊ตํด์ tmp[i][j]๊ฐ์ด ๊ฐ์ฅ ํฌ๋ค๋ฉด answer์ +1 ํ๋๋ก ํ๋ค..!
-> ์ด ๋ฌธ์ ๋ if ๋ฌธ์ผ๋ก ์ฒ๋ฆฌํ์ง๋ง.. ๋ง์ฝ ๋์๋จ๋ถ์ด ์๋๋ผ ์ ์ฌ๊ฐํ์ผ๋ก ๋น๊ตํ๋ผ.ํ์ผ๋ฉด 8๋ฒ์ ๋น๊ต๋ฅผ ํ์ด์ผ ํ๋๋ฐ
๊ต์ฅํ ์ฝ๋๋ ๋๋ฝ๊ณ ... ๋ณ๋ก์ผ ๊ฒ์ด๋ค..
๋ฌธ์ ํ์ด 2
int[] dx = { -1, 0, 1, 0 };
int[] dy = { 0, 1, 0, -1 };
public int solution2(int n, int[][] arr)
{
int answer = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
boolean flag = true;
for (int k = 0; k < 4; k++)
{
int nx = i + dx[k];
int ny = j + dy[k];
if ( nx >= 0 && nx < n && ny >= 0 && ny < n && arr[nx][ny] > arr[i][j]) {
flag = false;
break;
}
}
if (flag)
answer++;
}
}
return answer;
}
๐พ : ๊ทธ๋์ ๊ฐ์ฌ๋์
int[] dx = { -1, 0, 1, 0 };
int[] dy = { 0, 1, 0, -1 };
-> ๋์๋จ๋ถ์ ๊ฐ๊ฐ ๋ฐฐ์ด์ ๋ง๋ค์ด๋๊ณ ,
3์ค for๋ฌธ์ ๋๊ฒ ํ๋ค. k = 0 i + dx[0], j + dy[0] ๋ฅผ ํ๋ฉด '๋ถ' ๊ฐ์ ํด๋นํ๊ณ , k = 1 -> i + dx[1], j + dy[1] ์ '๋'๊ฐ์ ํด๋นํ๋ค.
์ด๋
int nx = i + dx[k];
int ny = j + dy[k];
nx, ny ๊ฐ์ด 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์์ผ ํ๊ณ , n ๋ณด๋ค๋ ์์์ผ ๋น๊ตํ ์ ์๋ค.
๋ฐ๋ผ์ arr[i][j]์ ๊ฐ์ด arr[i +dx[k]][j+dy[k]] ๋ณด๋ค ์๋ค๋ ๋ง์ ๋ด์ฐ๋ฆฌ๊ฐ ๋ ์ ์๋ค๋ ๊ฒ์ด๋ฏ๋ก boolean flag ๊ฐ์ false๋ก ์ง์ ํด์ค๋ค. ๊ทธ ๋ค์ ๋์ด์ ๋น๊ตํ ํ์ ์์ผ๋ break ํด์ฃผ๊ณ ,,
๋น๊ต ํ flag ๊ฐ์ด true์ด๋ฉด answer +1 ํด์ค๋ค.