알고리즘과 여러 번의 시도
뭐야 이문제 ㅋ 하고 처음에 이런 코드를 작성했다.
m,s,x1,x2 = map(int,input().split())
a,c = 0, 0
while True:
if x1 == (a*s+c)%m :
if (a*x1+c)%m == x2:
print(a,c); break
else:
a+=1
c+=1
else:
a+=1
c+=1
3 3 / 4 4가 출력돼서 생각해보니까
a랑 c를 같은 조건에서 동시에 +1 해주면 항상 a=c이다.
a랑 c를 따로 증가해주면서 조건에 맞는 구현을 하고싶으면
이중 포문으로 각각 증가하면서 조건에 맞는 케이스를 출력하면 된다.
m,s,x1,x2 = map(int,input().split())
a,c = 0, 0
for a in range(m):
for c in range(m):
if x1 == (a*s+c)%m and (a*x1+c)%m == x2: :
print(a,c); break
이렇게 작성하면 여러 케이스를 출력한다.
이중 포문을 빠져나오기 위해서 flag를 활용했다.
최종코드
m,s,x1,x2 = map(int,input().split())
flag = False
for a in range(m):
for c in range(m):
if x1 == (a*s+c)%m and (a*x1+c)%m == x2:
flag = True
print(a,c)
if flag :break
알게된 점
코드 중에 제일 똥코드가 생각이 그대로 줄줄이 나열된 코드라는데, 내 while문 코드를 보면 딱 그렇다. 😂
알고리즘은 그렇다치고 굳이 If - else 과정을 굳이 두번한 건 어떻게든 답을 내기 위해서 생각을 줄줄이 나열한 것과 같다.
의식적으로라도 불필요한 건 과감하게 쳐내자.