[파이썬 알고리즘 심화 스터디] 1주차 정리

1주차

AC 프로필

스터디 진행 전후의 프로필 상태를 비교하기 위해 첫 스터디 진행 직전의 프로필을 기록해둔다.

사실 그동안 백준에 랭크 시스템이 있다는건 알았지만 일정 수준 이상이 되어야 자동으로 뜨는건줄 알았다. 하지만 따로 설정을 해야 보이는 것이란걸 뒤늦게 알고 설정한 결과 실버 4였다.

지금껏 데이터 분석 위주로 학습하다보니 알고리즘에 크게 비중을 두지 않았었지만, 코딩테스트 준비와 사고력 향상을 위해 열심히 공부할 것이다.


Git 활용

Pull Requests를 활용하여 서로의 코드를 공유하고 피드백 할 수 있는 환경을 처음 경험해봤다.

실시간으로 주차별 문제를 풀어 올리고 스터디원들과 소통할 수 있어 좋다. 다만, 나의 경우 아직 변경된 한 파일만 커밋되는 것을 확인했음에도 이전에 변경된 사항들까지 굴비처럼 엮여올라가는 현상이 있어 가독성이 조금 떨어지는 것 같다. 그래도 문제풀이 자체가 더 중요하니까 업로드 관련 이슈들은 자투리 시간에 원인을 알아볼 계획이다.

알고리즘

  • 1934 최소공배수

    명진님의 코드에서 파이썬 math 라이브러리에 최소공배수를 구하는 내장함수 gcd() 가 있음을 알 수 있었다.

      # 명진 님의 코드
      import math
      ...
      for input_list in input_data_list:
      		a = input_list[0]
      		b = input_list[1]
      		print(a * b // math.gcd(a,b))
    

    최소공배수를 구하는 함수는 lcm()이므로 다음과 같이 문제를 풀 수 있었다.

      # 내가 작성한 코드
      import math
        
      T = int(input())
        
      for i in range(T):
          a, b = map(int, input().split())
          print(math.lcm(a, b))
    
  • 9012 괄호

    나는 님과 비슷하게 괄호를 한 데 묶어 "()"를 제거해나가는 방식을 채택했으나, @명진.K 님의 코드에서 stack을 이용해 구현하는 방법을 알 수 있었다. 학교에서 자료구조를 배운 적은 있으나 아직 직접 활용하기까지는 많은 노력이 필요할 것 같다.

      # 명진 님의 코드
      for bracket_list in input_bracket:
      		stack = []
      		if bracket_list[0] == ")":
      			print("NO")
      			continue
      		for bracket in bracket_list:
      			if not stack:
      				stack.append(bracket)
      			elif stack[-1] == bracket:
      				stack.append(bracket)
      		#무조건 서로 다른게 아니라  ( 로 시작해서) 로 끝나야한다. 즉 시작하는 브라캣은 정해져있다.
      			elif stack[-1] == "(" and bracket == ")":
      				stack.pop()
      		if not stack:
      			# print(bracket_list)
      			print("YES")
      		elif stack:
      			print("NO")
    
      # 내가 작성한 코드
      def isRight(s):
          while True:
              s = s.replace("()", "")
              if "()" not in s:
                  if s: return "NO"
                  else: return "YES"
        
      T = int(input())
      for i in range(T):
          strings = input()
          print(isRight(strings))
    

시험

  • 23253 자료구조는 정말 최고야

    데이터 직군의 분석 코딩테스트와 달리 NumPy 라이브러리를 사용할 수 없어 당황했다. 컴파일 에러가 뜨며, 일반적인 코딩테스트에서 사용하지 못하게 한다고 한다는 것을 알았다. NumPy라이브러리를 사용한 부분을 직접 구현했으나 시간 초과가 떴다. 다시 한 번 풀어봐야 될 것 같다.

Categories:

Updated:

Leave a comment