TIL_8 | 알고리즘에 관한 여러가지 TIP 1

code_sign·2021년 1월 6일
0

algorithm

목록 보기
4/4

오늘은 내가 알고리즘 문제를 풀면서 깨달았던 것들을 정리해보려고 한다!

어떤 것들을 정리??

  1. 회문
  2. 리스트 오른쪽/왼쪽으로 밀기
  3. 숫자뽑기

회문: 앞뒤가 똑같은 전화번호 아닌 String!

check_str = "abcba"
for i in range(len(check_str)//2):
	# 반복문~

회문에 관련된 알고리즘을 풀때는 전체 길이의 1/2만 검사하면 된다!
(어차피 앞뒤가 똑같기 때문에!)

혹은

check_str = "abcba"
if check_str == check_str[::-1]:
	return True

로 작성하면 된다는 사실!! 완전 간편하다!👍

리스트 오른쪽/왼쪽으로 밀기!

# 원래 리스트!
a = [1, 2, 3, 4, 5]

# 왼쪽으로 밀기?
a = [2, 3, 4, 5, 1]

# 오른쪽으로 밀기?
a = [5, 1, 2, 3, 4]

위와 같은 방법으로 만들고 싶을때 어떤 방법을 사용할 수 있을까??

나는 처음에 for문으로 i의 값을 len(a)로 하고 step을 -1로 해서 어려운 방법을 삥 돌아서 갔었는데, 다음과 같은 방법이면 훨씬 편하게 작성 할 수 있다!

# 왼쪽으로 밀기
a.append(a.pop(0))

# 오른쪽으로 밀기
a.insert(0, a.pop())

짜란😱👍

숫자만 골라내기?

내가 풀었던 문제는 'A34BV1DSC6' 같은 문자열에서 문자는 오름차순으로 정렬하고, 숫자는 다 더해서 문자열 마지막에 넣는 문제였는데, 이 문제에서 어떻게 숫자만 골라 낼 수 있을까??

# 나의 방법
for x in check_str:
	if ord('0') <= x <= ord('9'):
    	...

이러식으로 풀었었는데... isdigit 함수만 알면 된다! 반대로 문자열을 알아내는 방법의 함수는 isalpha()가 있다! 두 함수 모두 returnTrue/False로 한다.

# 더 좋은 방법
for x in check_str:
	if x.isdigit():
     ...

훨씬 깔끔하다!

앞으로도 이러한 방법들을 꾸준히 알아나가서 공부 열심히 해야겠다!

Today, Learned

배운점

  • 회문의 경우 a[::-1]의 방법이 너무 간편하고 좋다는 점!
  • 리스트 미는 문제에서 왜 insert를 생각하지 못했는지... 😂
  • isdigit(), isalpha() 까먹지 말자!!

느낀점

  • 내장함수.. 더 많이 알아봐야겠다!
  • 나의 생각을 뒤집어 보기!

오늘의 한마디

역시 코딩의 세계에서 내가 아는 지식은 새발의 1 마이크로미터도 되지 않는구나..

profile
방탈출 좋아하는 코딩덕후

0개의 댓글