/Algorithm_Training

Algorithm_Training

Primary LanguageJupyter Notebook

Algorithm_Training

알고리즘 개인공부(Python)


1. 디버깅

  1. 입력 개수가 주어지지 않을때- try except 처리로 해결
while True:
    try:
        n = int(input())
        print(d[n])
    except:
        break
  1. 출력형식이 잘못되었습니다. - 불필요한 공백 출력시 눈에 띄지는 않지만 에러가 출력됨.
for i in range(a):
    for j in range(a):
        print(matrix[i][j], end = ' ')
    if i != a-1:
        print() ## print(' ') 로 해서 "출력형식이 잘못되었슫니다" 계속 뜸
  1. 시간초과 - input() 대신 sys.stdin.readline()

2. Pythonic 문제풀이

  1. Sort 함수 - key, reverse를 활용
def solution(numbers):
    numbers = [str(x) for x in numbers]
    numbers.sort(key = lambda x: (x*4)[:4],reverse=True) ## 리스트 값을 4번 반복한후 4번째 자리까지 가장 큰수를 추출
    if numbers[0] == '0':
        answer = 0
    else:
        answer =  ''.join(numbers)
    return answer
  1. Count 함수 - collections의 Count함수를 활용하여 리스트내 원소들의 개수를 편하게 추출
from collections import Counter

my_list = [1,2,3,4,4,4]
Counter(my_list)[4] # 원소 4의 개수 3이 출력됨
  1. List comprehension 으로 복잡한 for 을 간략화, 딕셔너리 생성 가능. zip으로 두개 이상의 리스트를 각 원소별로 작업 가능
specs = [['yunsik','100'],['choi','200']]
spec_dict =  {key : int(value) for key, value in specs}

list1 = [1,2,3]
list2 = [4,5,6]

print([x + y for x, y in zip(list1, list2)]) # [5, 7, 9]
  1. Nested List 에서 작업하기
# unlist in python
nested_list = [['a','b','c'],['d','e','f','g']]
unnested_list = [y for x in nested_list for y in x] ## ['a', 'b', 'c', 'd', 'e', 'f', 'g']

# sum of the list
nested_int = [[1,2,3],[4,5,6]]
total_sum = sum(map(sum,nested_int))
  1. String 출력 - format을 쓰는게 깔끔
  for i in range(len(matrix)-1):
    answer = do(matrix[i])
    print("Case {}: {}".format(i+1,answer)) ## format

3. 그 외

  1. 2차원 리스트 90도 회전

ex ) 프로그래머스_자물쇠와 열쇠

def rotate_a_matrix_by_90_degree(a):
  n = len(a) # 행 길이 계산
  m = len(a[0]) # 열 길이 계산

  result = [[0] * n for _ in range(m)] ## 결과 리스트
  for i in range(n):
    for j in range(m):
      result[j][n-i-1] = a[i][j]

  return result