1월 26, 2022

ax=b를 만족하는 x 값 구하기

 

문제는 이러합니다.

처음 접근: x의 리스트를 구해서 x를 if문 안에 넣으려 했습니다. for문을 이용하여 x를 담을 리스트에 x값을 넣으려 했으나, for문의 범위를 정하는 단계부터 어려움을 겪었습니다.


옳게된 접근

약간의 수학적 지식이 필요합니다.. 


a와 b의 값에 따라 해의 개수가 정해지기에, x를 따로 구할 필요가 없습니다. 위의 도표에 따라 if문을 작성해 줍니다.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
a = int(input("첫번째 정수"))
b = int(input("두번째 정수"))

if a != 0:
  if if type(b/a) != int:      
    print("No Solution")
  elif if type(b/a) == int:    
print(b/a) elif a == 0: if b != 0: print("No Solution") elif b == 0: print("Many Solutions")

음 .. 당연히 될 줄 알았는데 해결이 되지 않습니다...

위의 도식에 따라 if문을 작성하기만 하면 되는 줄 알았는데 도무지 이유를 모르겠습니다..


무엇이 문제였는지 테스트케이스를 찬찬히 뜯어보다가 문제를 발견했습니다.

a = 2

b = -4 를 입력하면 

x가 -2가 나와야 하는데 "No Solution"이 지속적으로 발생합니다.

왜 그럴까요???

print(type(b/a)) 를 하고 나서야 이유를 알았습니다.


당연히 -4를 2로 나누면 당연히 정수 2가 나오겠거니.. 한 제 생각이 틀린것입니다.

파이썬은 나누기를 하면 float 값을 반환합니다!!!!

그래서 계속 No solution이 나왔던 것입니다.

이 문제를 단순 data type 확인을 통해 풀 수 없음을 깨달아야 합니다.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
a = int(input("첫번째 정수"))
b = int(input("두번째 정수"))

if a != 0:
  if b%a != 0:     # if type(b/a) != int 이전 코드
    print("No Solution")
  elif b%a == 0:   # if type(b/a) == int 이전 코드
    print(b/a)
elif a == 0:
  if b != 0:
    print("No Solution")
  elif b == 0:
    print("Many Solutions")

b/a 가 정수 값인지 확인하기 위하여 b를 a로 나눴을 때의 나머지가 0 인지를 검사하였습니다. 이렇게 작성한다면 오류 없이 문제가 해결됩니다.

5번 라인과 7번라인에 에 int(b/a) != b/a 이런식으로 b/a가 int 값이 되는지 확인하는 방법도 있습니다.


b/a의 타입을 print해보지 않았다면 아직도 헤매고 있었지도 모릅니다..

이렇듯 문제를 해결하는 과정에서 도무지 알 수 없는 에러들이 발생하면 코드의 전개 과정을 print

등을 이용하여 일일히 뜯어본다면 문제 해결에 도움이 될 수 있다는 것을 배운 문제풀이였습니다.