CodingTest 16

[Python] 나눗셈, 몫과 나머지

/와 //가 헷갈려 정리해본다. "/": 기본적인 나눗셈, 결과는 항상 float 형 a = 10, b = 3 => a / b 결과는 3.3333333333333335 a = 10, b = 2.5 => a / b 결과는 4.0 "//": 나눗셈의 몫 a = 10, b = 3 => a // b 결과는 3 (int) a = 10, b = 2.5 => a // b 결과는 4.0 (float) "%": 나눗셈의 나머지 a = 10, b = 3 => a % b 결과는 1 (int) a = 10, b = 2.5 => a % b 결과는 0.0 (float) "divmod(a, b)": 나눗셈의 몫과 나머지, 나눗셈 연산을 수행할 변수 2개가 필요하며 결과는 항상 튜플 형식! a = 10, b = 3 => divmod..

[Python] 우선순위 큐와 힙(PriorityQueue & heapq)

🔍 우선순위 큐와 힙(PriorityQueue & heapq) 우선순위 큐(힙 큐) 문제들을 분명 풀었던 기억이 있는데, 그때도 얼렁뚱땅 풀었던 기억이 난다. 오늘 절댓값 힙(백준 11286번) 문제를 푸는데, 우선순위 큐는 기억이 나지 않아 deque로 풀어보니 역시나 시간초과가 났다. 이참에 우선순위 큐에 대해 정리해놓아야겠다 생각이 들어 작성해 본다. 대략적인 개념과 파이썬에서의 사용 방법을 정리해보려 한다. 공식 문서와 이것이 코딩 테스트다, 기타 블로그 등을 참고하였다. 📃 우선순위 큐(Priority Queue) 우선순위 큐는 우선순위가 가장 높은 데이터를 가장 먼저 삭제하는 자료구조 데이터를 우선순위에 따라 처리하고 싶을 때 사용함 구현 방법 2가지 리스트를 이용하여 구현 (삽입: O(1),..

[Python] 10진수 -> 2, 8, 16진수 변환

프로그래머스 레벨2 이진 변환 반복하기 10진수에서 2, 8, 16진수 변환 bin(), oct(), hex() 함수 사용, 결과는 문자열 타입 format() 함수 사용, 두 번째 인자에서 # 제거 시 접두어가 빠진 결과 얻을 수 있음 value = 30 b = bin(value) # 0b11110 o = oct(value) # 0o36 h = hex(value) # 0x1e b1 = format(value, '#b') # 0b11110 b2 = format(value, 'b') # 11110

[Python] 대문자와 소문자 (반환, 검사)

프로그래머스 레벨2 JadenCase 문자열 만들기 string.upper() => 모든 문자열이 대문자로 바뀐 문자열을 반환함 (기존의 문자열이 변경되는 것이 아님) string.lower() => 모든 문자열이 소문자로 바뀐 문자열을 반환함 ( 〃 ) string.isupper() => 모든 문자가 대문자인지 검사하는 함수, 모두 대문자인 경우에만 True 반환 string.islower() => 모든 문자가 소문자인지 검사하는 함수, 모두 소문자인 경우에만 True 반환

[Python] 에러와 예외 (try, except, raise ..)

🔍 에러와 예외(try, except, raise..) 그동안 알고리즘 문제를 풀 때 인덱스를 벗어나는 등의 오류가 발생했을 때 범위를 제한하거나 다른 풀이를 모색해왔는데, 친구가 "try except문 쓰면 되는 거 아니야?"라고 말해준 뒤로, 정말 많이 애용하고 있다.(그동안 왜 생각을 못 했지..) 파스칼의 삼각형 문제(SWEA 2005번)를 풀면서 try-except를 사용하여 인덱스가 음수인 경우 예외 처리를 해주었는데, 파이썬에서는 인덱스가 음수여도 배열 끝을 기준으로 요소에 접근할 수 있다는 것이 문제였다. '인덱스가 음수인 경우 아예 의도적으로 예외를 발생시킬 순 없을까?' 하고 찾아본 결과 raise문을 사용하면 해결이 가능함을 알게 되었고, 이참에 정리를 해놓아야겠다 생각..

[Python] 정규 표현식 (Regular Expression, RE)

🔍 Regular Expression HOWTO 문자열 문제(백준의 9342)를 푸는 도중 감이 잡히지 않아 다른 사람들의 풀이를 참고하였는데, 정규 표현식을 사용하면 쉽게 풀 수 있는 문제였다. 이론은 대학교 수업 시간에 배운 바 있지만, 파이썬에서는 어떻게 사용하는지 몰랐기에 이참에 정리해 보고자 한다. 공식 문서와 점프 투 파이썬 등을 참고하여 작성하였다. 모든 내용을 다룬 것은 아니기에, 공식 문서 등을 참고하면 좋을 것 같다. 📃 정규 표현식(Regular Expressions) 정규 표현식(Regular Expressions)은 간단히 정규식, RE, regexes 또는 regex 패턴 등으로 줄여 부름 정규 표현식은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어임 쉽게 ..

[Python] 정렬 (sort & sorted, reverse, key)

🔍 Sorting HOW TO 단어 정렬 문제(백준의 1181)를 풀다가 확실히 정렬에 대해 정리할 필요가 있겠다는 생각이 들어 작성해 본다. 공식 문서를 참고하였고, sort와 sorted 그리고 reverse와 key에 대해서 정리해 보았다. 추가로 파이썬에서 액세스 함수를 더 쉽고 빠르게 만들 수 있도록 제공하는 operator 모듈 함수는 정리하지 않았지만, 알아두면 꽤 쏠쏠할 것 같다. 참고 🗃️ sort() VS sorted() 파이썬에는 리스트를 정렬하는 내장 함수 두 가지가 있음 바로 sort()와 sorted()이며, 둘은 크게 두 가지의 차이점이 있음 1️⃣ 첫 번째 차이점 ◻ sort() 함수는 리스트를 제자리에서(in-place) 수정함 ◻ sorted() 함수는 새로운 정렬된 리스..

[Python] 얕은 복사, 깊은 복사

🔍 얕은 복사, 깊은 복사 프로그래머스의 "가장 먼 노드" 라는 그래프 문제를 풀 때 겪은 일이다. 기존 리스트를 복사하여 새로운 리스트를 만들고, 새로운 리스트를 변경해줬는데 기존의 리스트도 같이 변경되었다. (분명 id 값은 다른데..) 결론부터 이야기하자면, 위의 예시는 mutable 변수 내부에 mutable이 있는 케이스이고, 얕은 복사를 했을 경우 mutable 내부에 있는 mutable 객체들의 메모리 주소는 동일하다. 따라서 같은 객체를 참조하고 있는 상태이므로, 복사한 객체에서 변경을 해도 원본 객체에 영향을 준다. id(a) 값과 id(b) 값은 다르지만, 그 내부의 객체 id(edge[0])과 id(re_edge[0])은 같은 주소임을 확인할 수 있다. 얕은 복사로는 변수간의 독립성이..