본문 바로가기

프로그래머스 퀴즈(Python)/level 0

22.12.20 파이썬 코딩 퀴즈#30, 31, 32, 33(프로그래머스)

이번 문제는 3,6,9 문제 처럼 보이지만, 생각보다 조건이 더 까다롭다. 3의 배수들도 다 처리해 줘야 하는 문제이다.

 

코드를 살펴보면 건너띄울 값으로 사용할 m 외에는 특별한건 없어 보인다.

for 문 아래에 while문을 작성해 줌으로서, i 인자 하나를 가지고 계속 반복할 수 있게끔 해주었다.

또한 while문의 조건을 생성된 i+m 값이 3으로 나누어 떨어지거나, 문자형으로 변환하였을때 3을 포함하는 경우라면 계속해서 m 값을 증가 시켜 준다. 순차적으로 값이 상승하기에 m 값은 누적되어서 i값에 더해줘야 한다.

 

다시 등장한 삼각형 문제이다.

이번엔 2변의 길이만 주어지만, 남은 한변이 될 수 있는 정수의 개수를 구하는 문제이다.

조건에 따라 가장 긴 변이 될 정수는 전달받은 두 변의 합보다 큰 범위에는 존재할 수 없다.

이 경우 두가지의 경우가 생기는데, 새로운 변 이 가장 긴 변인 경우와, 전달받은 매개변수의 최대값이 가장 긴 변이 되는 경우이다. 이를 if문으로 조건 설정하여 answer 값을 증가 시켜주면 된다.

이번 문제는 제한사항이 좀 길다.... 그냥 쉽게 생각해서 "x + x +x "가 주어졌을때 이를 줄여서 "3x"라고 줄여주는 것이다.

다 풀고 나서, 다른사람들의 코드를 보았는데... 역시나 길다... 길 수밖에 없는 코드다..

마지막 return 값들의 조건도 굉장히 까다롭기 때문에 불필요하게 코드들이 길어졌다.

num_x 는 x의 개수를 의미한다. num_num 은 상수들의 합이다.

먼저 매개변수를 " + " 기준으로 쪼개서 불필요한 기호와 빈 곳들은 과감하게 버려준다.

이제 x의 개수와 상수를 구해야 하는데, x를 포함한 요소의 길이에 따라 num_x에 더해지는 값들이 결정된다.

출력문은 따로 설명할 필요가 없다.

다음 문제는 소인수분해 문제이다.

소인수분해의 경우 이중for문으로 쉽게 해결 가능하다.

먼저 전달받은 수를 나머지 없이 나누어 주는 값을 구한뒤, 그 값의 약수의 갯수를 구하면 된다. 만약 약수가 2개 뿐이라면 그 수가 소인수 이므로, 해당 answer 에 추가해 주면 된다.