분류 전체보기 275

[Python] is와 == / and와 & / or과 |

언뜻보면 비슷하다고 느껴지는 연산자들의 차이가 무엇인지 알아보자. 먼저, is와 == 이다. is identity 연산자 (식별 연산자) reference comparison (참조 비교) --> 주소 비교! == 비교 연산자 value comparison (값 비교) 뭐든 예시를 살펴보면서, 이해하는것이 가장 빠르니까 예를 한번 살펴보자. 왼쪽 코드와 같이 print문을 출력해보면 모두 값이 True가 나온다. 그렇다면, 값을 변경해보면 어떨까? == 연산은 여전히 다 True가 나왔지만, is연산에서는 False 가 나왔다. 앞서 소개했듯이, is 연산이 값비교가 아닌 주소 비교 연산자이기 때문이다. 파이썬은 새로운 변수에 할당하려는 값이 이미 메모리에 존재하면 새로운 값을 생성하지 않고 기존에 존재..

[백준/알고리즘/python/java] 1764번 - 듣보잡

정답 비율이 높지 않아서, 뭔가 시간초과와 관련된 문제이겠거니 싶었다. 역시나 처음 풀었던 코드는 시간초과에 걸렸다. 아래는 처음 시간초과에 걸렸던 코드이다. import sys import collections input = sys.stdin.readline a, b = map(int, input().split()) answer = [] no_heard = [input().strip() for i in range(a)] no_seen = [input().strip() for i in range(b)] if a < b: for word in no_heard: if(word in no_seen): answer.append(word) else: for word in no_seen: if(word in no_..

[백준/알고리즘/python/java] 2164번 - 카드2

맨 처음에 시간초과가 났던 코드였다. 심지어 PyPy3로도 시간초과가 났었다. 로직은 단순한데, 시간초과가 났다면 다른 라이브러리의 힘을 빌려야 하는 순간이다. 기존 리스트로 카드 세트를 생성하고 처음엔 remove나 del 함수를 사용했지만, 단순히 pop 함수를 사용해도 되는데, 파이썬의 list는 중간에 있는 요소를 pop할 때 시간복잡도가 O(n)이지만, collections.deque는 시간복잡도가 O(1) 라고 한다. 먼저 맨 처음에 작성했던 코드는 아래와 같다. import sys input = sys.stdin.readline n = int(input()) card_list = [] for i in range(n, 0, -1): card_list.append(i) while(len(card..

[백준/알고리즘/python/java] 1015번 - 수열 정렬

맨 처음에, 솔직히 문제가 잘 이해가 가지 않았다. 일단 예제 입력을 그대로 문제에 적용해보면, 입력으로 주어진 배열 A의 원소 2 3 1 은 아래와 같이 표현할 수 있다. B[P[0]] = A[0]->B[1] = 2 B[P[1]] = A[1]->B[2] = 3 B[P[2]] = A[2]->B[0] = 1 다시한번, 문제를 잘 읽어보면, 여기서 B배열은 A배열의 비내림차순 배열이라는 것을 알 수 있었다. 우리는 A배열로부터 B배열을 만들었는데, 그럼 자연스럽게 P배열은 A배열의 원소 크기 순이라는 것을 알 수 있다. 여기서 만약, 동일한 크기의 원소라면, 앞서 있는 것을 먼저 출력하면 된다. 예를 들어 A 배열이 1 3 2 2 라고 하면 P배열은 0 3 1 2 순으로 출력 될 것이다. 작성한 코드는 아래..

[백준/알고리즘/python/java] 13698번 - Hawk eyes

기말고사가 끝나고 다시 백준문제를 풀어봤다. 이 문제의 로직은 간단했다. 그냥 사용자에게 섞는 순서를 가리키는 알파벳을 입력받고, 해당 알파벳마다 섞는 방법이 다르기 때문에 방법에 따라 그냥 위치만 바꿔주면 됐다. 흔히들 swap할 때는, temp라는 변수를 정해서 원소를 뒤바꾸는데, 파이썬이어서 좋은 점은 temp라는 변수를 따로 안 정하고, 그냥 배열 원소를 서로 바꿀 수 있다는 점이었다. 처음엔, 틀렸었다. 맨 처음 틀린 코드는 아래와 같다. import sys input = sys.stdin.readline order_list = input() ball_position = [1, 0, 0, 1] for alpha in order_list: if(alpha == 'A'): ball_position[..

반응형