본문 바로가기
WIL&TIL/TIL

20230322 TIL - 연습, 문제 위주

by 코드뭉치 2023. 3. 22.

 

  ↓ 문자열 내 p와 y의 개수

더보기

 

문자열의 p의 개수와 y의 개수(대소문자 구별 없이)가 같으면 True, 틀리면 False를 return하게 하는 문제

문자열을 for문으로 하나씩 돌면서, 빼온 친구가 p나 y면(or) 각각의 카운트를 증가시키게 만들었다.

 

첫번째 사진에서는 or를 잘못써서 if "p" 부분에서 항상 True를 반환해서 작동하지 않았다.

→  "P" ==a or "p" ==a 로 수정.

 

 대소문자를 따로 쓸 필요없이 문자열을 소문자나 대문자로 바꿔서 쓰면 될거같아서 .lower()를 사용해 바꿔줬다.

.upper()를 써도 되고, 아예 문자열 자체에 걸어주고 시작해도 상관없을듯함.

 

글쓰면서 보니까 마지막의 for문도 cnt[0] == cnt[1]을 리턴하면 더 깔끔했을 것 같다.

 

 

하샤드 수

더보기

 

숫자 자릿수별로 떼서 합한 값으로 원래 수를 나눴을 때 나머지가 0이 되는지 검사하는 함수

0단계에서 풀어봤던 자릿수별로 합하기를 그대로 사용해 제대로 작동하는지 확인했다.

예전에 풀때는 변수를 3개 만들어서 몫, 나머지, 합 등등 따로 계산했지만 이번엔 하나 줄였다.

 

양의 정수 num을 a에 넣고, 10보다 클 때, 10으로 나눠주면서 재귀함수?를 만들어 a의 값이 10이하인 동안 반복되도록 만들었고, 몫은 b에서 합치고 마지막 10보다 작은 a는 1의자릿수가 된다. 그 둘을 합쳐서 해결.

 

 

↓ 콜라츠 추측

더보기

 

문제로 보면 심플한 작업이다. num값을 a에 할당하여 while 반복문으로 굴리면 쉽게 해결... 어라?

break가 작동을 안하는건지 첫번째 사진에서 출력된 값을 보니 cnt가 503개나 찍혀있는 것이다.

알고보니 break구문이 while에서 빠져나오면서 다음 구문을 실행하기 때문에 return -1 부분이 작동하지 않았던 것.

 

따라서 while 밖에 있는 return에 같이 실어보냈다.

 

 

 

↓ 나누어 떨어지는 숫자 배열

더보기

 

문제의 핵심은

arr안에 원소들에 대해서 for문으로 돌리면서 나누어 떨어지면 리스트에 넣고 리스트를 sorted로 정렬하면 끝

"리스트가 비어있지 않다면"을 result is not None으로 썼더니 에러가 났다.

 

True값이 오면 되므로 if result만 써준다면 빈 리스트에서 알아서 False를 내주는 것이였다..

무서운 이야기) 리스트 혹은 문자열이 비어있으면 False, 채워져있으면 True를 반환한다.. 절대 None을 쓰지마

 

 

기타 사항들

 

for문 while문 if문 끝에 콜론 안다는 습관(미해결)

replace를 긴 배열에 for문으로 넣으니 시간복잡도가 매우 높다

리스트 혹은 문자열이 비어있으면 False, 채워져있으면 True를 반환한다

pprint를 쓰면 코드가 예쁘게 나온다!

 

 

 

'WIL&TIL > TIL' 카테고리의 다른 글

20230324 TIL - Python 심화 뽀개기  (2) 2023.03.24
20230323 TIL - Python 문법 강의, 연습 문제 풀이  (0) 2023.03.23
20230321 TIL 연습문제  (0) 2023.03.21
20230320 TIL - Python 기초 강의  (0) 2023.03.20
20230317 TIL  (0) 2023.03.17

댓글