백준 오답노트/2차원배열

백준 - 2차원배열 2563번 색종이 / 구글링 후 오답

초보병일이 2022. 12. 12. 14:01
728x90

= 내가 접근한 방법 ( 틀림 ) =

1. input 받기

2. 겹치는 색종이가 있으면 그 색종이는 총 넓이에서 제외한다.

ex) 3장의 색종이가 있으면 검은색을 차지하고 있는 최종 넓이는 100이다.

3. 겹친 색종이 구하기를 구하기

3-1. 먼저 x축이 겹치는 상태를 먼저 확인한다.

3-2. x축이 겹치는 색종이들만 따로 y축도 겹치는지 확인한다.

3-3. 그리고 최종 넓이에서 겹친 넓이를 빼준다.

이게 내가 한 방법이다. 코드로 한 번 보자.

1. 2차원배열에 x축과 y축을 다 저장했다.

2. 겹치는 색종이를 먼저 확인한다.

컬렉션 Set을 이용했다.

Set을 이용했다.

내가 이차원 배열을 이용해서 x축 y축을 저장했기 때문에 String으로 변환시켜준 후, 총 넓이를 구했다.

3. 어떤 색종이들이 x축이 겹치는지 먼저 찾는 과정이다.

참고로 count > 1인 이유는 동일 선상일 때를 제외하는 과정이다.

4. x축이 겹치는 인덱스 번호들만 딴 후,

y축이 겹치는지 확인하는 메서드다.

5. 얼마나 겹치는지 count로 확인 후 static 변수인 xLine에 다 저장을 한다.

6. 최종 wide에서 겹친 부분을 뺀다.

2차원배열에서 0보다 큰 값을 가지고있는 것들만 계산하는 과정이다.

난 이렇게 풀었는데 오답이 나왔다.

자세한 이유는 내가 이 코드를 분석하고 테스트를 더 해본 후에 수정하겠다.

= 구글링 후 해결한 과정 =

1. input받기

2. 문제에 도화지는 가로 100 세로 100이라고 주어졌다.

따라서 도화지를 먼저 이차원 배열 [101] [101]로 생성한다.

3. 색종이의 크기는 10x10의 크기다.

3 7 이라는 좌표가 주어졌다고 해보자

그러면 x는 3~ 13, y는 7 ~ 17이다.

여기서 이런 생각을 못했기 때문에 빙빙 돌아갔다고 생각한다.

2x2 배열이있다고 가정해보자

그럼 (0, 0) (0, 1) (1, 0) (1, 1)이렇게 생성이 되는데 이 배열의 갯수는 몇 일까? 4개다.

2x2 정사각형의 넓이는 몇 일까? 4다.

즉 배열의 크기만큼 넓이라고 생각하면 되는 거였다.

3 7이라는 값을 입력하면

3~13, 7~17까지 (3, 7) (3, 8) (3, 9) (3, 10) ........... (12, 16) 까지하면 100개니까 넓이가 100임을 알 수 있고

이걸 for문을 이용해서 wide의 값이 0일 때, 좌표에 맞게 1로만 수정해주면 된다.

값이 0일 때만 수정하기 때문에 겹칠 경우가 제외되는 것이다.

4. 결과 출력

배열에 1인 값을 다 더하면 최종 넓이를 구할 수 있다.

 

= 최종 코드 =

 

간단하게 풀 수 있는 문제였고, 어려운 문제가 아니였다.

 

내가 아직 경험도 부족하고 실력이 많이 부족함을 느낀다.

 

다른 사람의 코드때문에 시야도 넓어지고 다양한 풀이를 접해서 정말 좋지만

 

문제를 더 많이 접해보고 더 많이 풀어보고 다른 사람의 풀이를 보지 않아도 스스로 완벽하게 풀 수 있을때까지 더 열심히 노력해야겠다.

728x90