2월 4일 오늘의 일기

원규의 차근차근·2022년 2월 4일

오늘은 알고리즘을 하는날이다.
항상 느끼는건데 알고리즘을 할 때 막상 시작하려고 하면 어떤걸 넣어야 할지 아주 조금 떠오르는걸 어떻게 응용해야 할지 감을 잡는것도 힘들지만 더 짜증나는건 막상 인터넷이나 풀이를 보고나서는
이해가 단번에 되는거다.
차라리 이해가 안되면 모르는 거라고 생각하고 덜 짜증날텐데, 왜 나는 그렇게 하지 못하는거지?

일단 오늘 가장 먼저 두 정수의 합에 대해서 했다.

문제에서 a와 b가 있을 때 a가 3 b가 5면 a+b를 하게 될 때 3+4+5=12 이런식으로 나와야 하고
a와 b가 똑같이 3이면 결과값이 3이 나와야 한다.
그리고 b가 3 a가 5여도 똑같이 12가 나와야 한다.

그래서 나는 if문을 사용해서 풀이를 진행했는데 먼저 b가 a보다 클 경우 return으로
범위(range)가 (a,b그리고 b+1)까지 해 놓은다음 그 값들을 list로 펼쳐놓은 다음 sum(합)을
해주면 문제에서 제시한 결과값이 도출된다.
a가 클경우도 똑같이 해주면 되고 a와 b가 값이 같을 때 어차피 a나 b의 숫자중 아무거나 내도 똑같은 결과값이 나오니 둘중에 하나를 return으로 출력해주면 된다.

그 다음으로 진행한 문자열 다루기부분이다.

이 문제는 문자열의 길이가 4자 또는 6자의 길이이고, 오로지 숫자로 있어야 참이고 아닐경우는 거짓으로 결과값을 도출해야 한다.

그래서 이번에도 if문을 사용해서 길이len(s)로 위에 제시한 4 or6 일 경우에 s.isdigit이라는 숫자를 검출하는 명령어를 사용해서 참일경우에 true를 출력 아닐경우 false를 출력하게 만들었다.

여기서 s.isdigit을 처음 사용해봤고 알아두면 좋은 명령어라고 생각했다.

3번째로 한 것은 나누어 떨어지는 숫자의 배열이다.


이런식의 출력값이 나와야 하는데 첫번째로 arr에 있는 숫자들 중에 divisor의 배수가 있으면 그 값만 return으로 출력해주고 출력해준 숫자는 오름차순으로 해줘야 한다.
만약 배수가 없을 경우 출력을 -1로 해주면 된다.


그래서 나는 for 문으로 먼저 배수의 경우를 출력하기 위해 임의의 n값을 arr에 넣었을 때 if문 나누기를해서 0이 나오면 그 값들을 출력하게 만들었다. 여기에 answer 옆에 append(n)을 넣었는데 그 이유는 어차피 결과값은 배수이기 때문에 그 n값도 당연히 포함이 된다.
append(n)을 넣어주면 n도 결과값에 포함시켜준다.

그 다음 if문을 사용해서 결과값(answer)의 길이(len)이 1보다 작을 경우 즉 배수가 아닌경우에는 출력이 -1이 되도록 하였다.

마지막에 sorted(answer)에서 sorted를 사용해서 오름차순으로 정리를 해 주었다.

가장 마지막으로 한 건 2016년 내가 원하는 날짜를 입력했을 때 그 날짜의 요일을 알려주는 프로그램을 만드는 것이다.

가장먼저 date 목록에 요일들을 적어넣어주고 그 다음 month에는 그 해 각 달마다의 날짜가 총 몇일이였는지를 써 주었다.
왜냐하면 2월달이 그 해에는 29일까지 있었기 때문
이렇게 요일과 날짜를 정리해 준 다음 답에 원하는 날짜의 요일이 나오게 하기 위해
month (여기서 a는 월이고 b는 일이다.)의 합을 일주일이니까 7로 나눠주면 date 안에 있던 그 요일이 나오는 것이다. 이건 내가 설명을 잘 못하겠다.
어쨋든 오늘은 이렇게 풀었다.

profile
우후루꾸루후구무루구부

0개의 댓글