일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 법의학
- OS
- 독서
- swea
- cs
- 운영체제
- language
- Programmers
- SW Expert Academy
- network
- 자료구조
- algogritim
- D2
- D3
- 알고리즘
- Computer Science
- 문제풀이
- 프로그래머스
- c++
- algorithm
- 네트워크
- data structure
- 감상문
- 데이터베이스
- LeetCode
- 재테크/투자
- Database
- BOJ
- db
- 백준
Archives
- Today
- Total
선택은 나의 것
[BOJ 백준] 1822번 차집합 (python) 본문
문제
BOJ 1822 : https://www.acmicpc.net/problem/1822
1822번: 차집합
첫째 줄에는 집합 A의 원소의 개수 n(A)와 집합 B의 원소의 개수 n(B)가 빈 칸을 사이에 두고 주어진다. (1≤n(A), n(B)≤500,000)이 주어진다. 둘째 줄에는 집합 A의 원소가, 셋째 줄에는 집합 B의 원소가
www.acmicpc.net
접근
나는 인덱스의 값을 비교해 보며 두 값이 다르면 정답 배열인 ans에 추가해주고 같다면 인덱스값만 올려주고 넘어가는 식으로 구현했다. 코드를 보면 단순하고 직관적이어서 빠르게 이해가 갈 것이다.
나는 python 초보라 이렇게 풀었지만 사실 python의 set을 이용하면 훨씬 손쉽게 차집합을 구할 수 있다. ex) set_a - set_b
위처럼 매우 간단하게 차집합을 구하는 것이 가능하다.
코드
n = list(map(int, input().split()))
numa = list(map(int, input().split()))
numb = list(map(int, input().split()))
numa.sort()
numb.sort()
ans = []
ai = bi = 0
if len(numa) == 0:
print(0)
else:
while 1:
if ai >= len(numa):
break
elif bi >= len(numb):
while ai < len(numa):
ans.append(numa[ai])
ai += 1
break
if numa[ai] == numb[bi]:
ai += 1
bi += 1
elif numa[ai] > numb[bi]:
bi += 1
else:
ans.append(numa[ai])
ai += 1
print(len(ans), end="\n")
for i in ans:
print(i, end=" ")
'☽ Algorithm > BOJ' 카테고리의 다른 글
[BOJ 백준] 2178번 미로 탐색 (python) (0) | 2020.08.06 |
---|---|
[BOJ 백준] 2799번 블라인드 (0) | 2020.08.06 |
[BOJ 백준] 4344번 평균은 넘겠지 (python) (0) | 2020.08.04 |
[BOJ 백준] 1668번 트로피 진열 (python) (0) | 2020.08.03 |
[BOJ 백준] 2857번 FBI (python) (0) | 2020.08.03 |
Comments