17611번 자바
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] x = new int[1000001];
int[] y = new int[1000001];
// 첫 번째 꼭짓점
int firstW = sc.nextInt() + 500000;
int prevH = sc.nextInt() + 500000;
int prevW = firstW;
// 나머지 꼭짓점
for (int i = 1; i < n; i++) {
int w = sc.nextInt() + 500000;
int h = sc.nextInt() + 500000;
if (prevW == w) { // 수직선
y[Math.min(prevH, h)]++;
y[Math.max(prevH, h)]--;
} else { // 수평선
x[Math.min(prevW, w)]++;
x[Math.max(prevW, w)]--;
}
prevW = w;
prevH = h;
}
// 마지막 꼭짓점과 첫 번째 꼭짓점 연결
if (prevW == firstW) { // 수직선
y[Math.min(prevH, firstW)]++;
y[Math.max(prevH, firstW)]--;
} else { // 수평선
x[Math.min(prevW, firstW)]++;
x[Math.max(prevW, firstW)]--;
}
// 큰 값 찾기
int xMax = 0;
int yMax = 0;
for (int i = 1; i < 1000001; i++) {
x[i] += x[i - 1]; // 이전 값이랑 누적합
y[i] += y[i - 1];
xMax = Math.max(x[i], xMax); // 큰 값 비교
yMax = Math.max(y[i], yMax);
}
System.out.println(Math.max(xMax, yMax));
}
}안녕하세요 17611번 문제 자바로 풀고있습니다.
백준 게시판과 인터넷에 공유된 풀이가 거의 없어 커뮤니티에 질문 올리게 되었습니다.
문제에서 주어진 예를 테스트 했을 때는 잘 작동하는데, 제출시에(40%쯤) '틀렸습니다' 라고 나옵니다. 해당 코드로는 작동하지 않는 반례 또는 식의 오류를 알려주세요. 감사합니다.
답변 2
1
안녕하세요, 인프런 AI 인턴입니다.
코드를 살펴보니 마지막 꼭짓점과 첫 번째 꼭짓점을 연결하는 부분에서 오류가 있는 것 같습니다. 현재 코드에서는 y[Math.min(prevH, firstW)]++;와 y[Math.max(prevH, firstW)]--;로 되어 있는데, 여기서 firstW가 아닌 firstH를 사용해야 하는 부분입니다. 변수 firstH는 선언되지 않았으므로, firstW와 같은 방식으로 첫 번째 꼭짓점의 높이를 저장하는 변수를 선언하고 사용해야 합니다.
올바른 접근은 다음과 같습니다:
- 첫 번째 꼭짓점의 높이를 저장할 int firstH = sc.nextInt() + 500000;를 추가하고,
- 마지막 꼭짓점과 첫 번째 꼭짓점을 연결할 때, firstH를 사용하여 수정합니다.
수정된 부분은 다음과 같습니다:
int firstH = sc.nextInt() + 500000; // 첫 번째 꼭짓점의 높이 저장 변수 선언 및 초깃값 설정
.
.
.
if (prevW == firstW) { // 수직선
y[Math.min(prevH, firstH)]++;
y[Math.max(prevH, firstH)]--;
} else { // 수평선
x[Math.min(prevW, firstW)]++;
x[Math.max(prevW, firstW)]--;
}
이러한 수정을 통해 첫 번째 꼭짓점과 마지막 꼭짓점을 올바르게 연결할 수 있고, 해당 문제에서 ‘틀렸습니다’ 오류를 해결할 수 있을 것입니다.
dp[x]가 최대값이라고 확신할수 있는 이유
0
46
1
1090번 문제 질문
0
151
1
유니온파인드
0
112
1
투포인터 25:15 질문
1
129
1
#1090번 문제 반례가 궁금합니다.
0
148
1
예제코드 자바입니다
1
187
1
정수론 파트 #2247 문제에 대한 질문입니다!
0
102
0
코드 오류
0
186
1
2강 정수론 문제3 #1407 질문
0
127
0
이차원 배열 (int형)dp로 0 혹은 -1로 체크하는 방법 말고 boolean형 배열로 체크해서 바로 리턴해줄 수 없나요?
0
154
0
1717번 최적화
0
112
0
백준 22988 문제 질문
1
193
2
[Python] 백준 1090번 문제
1
226
3
강의자료에서
1
162
2
2503 문제 제한 조건 질문!
1
249
2
백준 22988 번 문제
1
193
1
추가 강의 순서
1
181
2
(*문제 풀이)1090 테스트케이스 1번 C++
1
221
2
7강 RGB 색칠하기 질문 있습니다.
1
161
2
정수론 약수 빠르게 구하기 질문
1
257
1
1090 문제의 2, 3번째 아이디어는 결국 같은거 아닌가요?
1
375
2
1090 문제 관련하여 맨해튼 거리 최솟값에 대해 질문 있습니다.
1
223
2
누적합 문제 3번 질문
1
216
2
기억 ( 누적합 ) 강의 11660 문제
1
163
2





