저런 입력이 주어질 수 없습니다. 말씀하신 대로 답이 10이려면 3이라는 수가 주어지지 않아야 하기 때문입니다.
1037번 - 약수
N이 10일 경우,
2
2 5
와 같이 주어질 것입니다
3이 10의 약수가 아니므로
3
2 3 5 와 같이 주어질 일이 없습니다
N이 30일 경우,
6
2 3 5 6 10 15
와 같이 주어질 것입니다
'큰값 작은값 곱해서 ~이 답'이라는 부분은,
어떤 수 N을 수식으로 표현할 때
1 * N 으로도 가능하고
소수가 아니라는 가정 하에 N의 약수 중 1을 제외한 임의의 자연수 하나를 k이라 하면,
k * (N//k) 또한 N이 되겠지요
때문에 k * (N//k)로 값을 구하는 접근이 해결 방법 중 하나가 될 수 있습니다
3
2 3 5
이와 같은 데이터는 존재할 수 없습니다.
간단하게 증명을 해보면
2,3,5를 모두 약수로 가지는 수는 2*3*5의 배수여야 합니다.
따라서 2*3과 2*5, 3*5도 약수로 가져야 하는데 이는 2 3 5에 포함되지 않은 숫자입니다.
따라서 어떤 수 N의 진짜 약수가 모두 주어졌다는 본문의 내용과 부합하지 않습니다.
위와 같은 데이터가 성립할 수 없다면 -1을 출력해라 등의 전제조건이 문제에 있었다면 위와 같은 테스트 데이터에 대해 10을 출력하는 코드가 잘못된 코드라고 할 수 있으나, 문제의 입력 조건에 맞지 않는 데이터는 주어지지 않는다는 것이 보장되기 때문에 문제가 없는 것입니다.
3
2 3 5라는 입력에 대해
10을 출력하는 코드, -1을 출력하는 코드, 10000007을 출력하는 코드, 9999999999999를 출력하는 코드, 'Hello World!'를 출력하는 코드 모두 AC를 받습니다.
왜냐하면 그런 입력을 주어지지 않고, 이를 검증하지도 않으니까요.
댓글을 작성하려면 로그인해야 합니다.
wh2ssac 1년 전
3
2 3 5
로 문제가 입력했을때 큰값 작은값 곱해서 N = 10이 답이라는데
최소공배수 라고 생각해서 풀면 N=30가 나옵니다.
둘째 줄 "2,3,5 로 N의 진짜 약수를 모두 주었다"고 하는 문제의 조건을 보면
2도 10의 약수이고, 3은 10의 약수이고, 5도 10의 약수 여야 합니다
하지만 3은 10의 약수가 아니므로 모순이므로 N=10은 답이 아닙니다
이에 관한 질문글과 답변글 읽어보면 설명은 이러합니다.
N=30 라고 하면 6(=2x3), 10(=2x5), 15(=3x5) 모두 약수로 주어져야 했다 라고 합니다.
따라서 N=30 이 아니라고..
납득했습니다.
하지만 이 답변이 N=10 이어야 한다는 이유가 되나요?
위에 설명했다시피 10은 3의 약수가 아닌데요