문제풀이/백준(Boj) 문제풀이 188

[백준][투포인터] - 2003. 수들의 합 2

n,m = map(int,input().split()) a = list(map(int,input().split())) end = 0 s = 0 cnt = 0 for start in range(len(a)): while end < n and s < m: s += a[end] end += 1 if s == m: cnt += 1 s -= a[start] print(cnt) start 포인트를 for문을 돌면서 하나씩 접근한다 while문은 end포인트를 도는 것으로 두 개의 포인터로 해당 리스트를 돌면서 조건을 확인한다. 이때 s에서 start부분을 빼주는 이유는 해당 범위를 돌 때 1,2,3을 돈다고 하면 조건을 만족해 2,3,4를 돌아야 한다고 할 때 2,3이 겹치기 때문에 이때 해당 start 부분만 지..

[백준][파이썬] - 1764. 듣보잡(파이썬/python)

풀이 1 n, m = map(int,input().split()) d= {} for i in range(n): name = input() d[name] = 1 for i in range(m): name = input() if name not in d: d[name] = 1 else: d[name] = d[name] +1 res = [] for dic in d: if d[dic] == 2: res.append(dic) res.sort() print(len(res)) for r in res: print(r) 듣도 못한 사람을 키로 값을 1로 만들어 체크해준다. 보도 못한 사람 중 듣도 못한 사람과 겹치면 해당 값에 +1 해준다. 이때 값이 2인 키들만 res 리스트에 담아주고 이를 오름차순으로 출력하기 위해..

[백준][파이썬] - 10816. 숫자 카드 2(파이썬/python)

딕셔너리 사용 풀이 from collections import defaultdict int(input()) num = list(map(int,input().split())) int(input()) num2 = list(map(int,input().split())) res = defaultdict(int) for n in num: res[n] += 1 for x in num2: if x in res: print(res[x], end=" ") else: print(0, end=" ") defaultdict를 사용한 이유는 for문을 사용할 때 특정 키에 값을 += 1해주는 작업을 위해서다. 이때 그냥 딕셔너리를 쓰게 된다면? if not n in res: res[n] = 0 res[n] += 1 위와 같이 ..

[백준][파이썬] - 13417. 카드 문자열(파이썬/python)

from collections import deque for _ in range(int(input())): n = int(input()) s = input().split() dq = deque(s) res = deque(dq.popleft()) while dq: now = dq.popleft() if now > res[0]: res.append(now) else: res.appendleft(now) print("".join(res)) A가 대문자 중 가장 작은 문자라고 한다면 현재 문자와 앞에 제일 앞에 담겨있는 문자 중 더 큰 값은 뒤로 보내고 현재 res 안에 제일 작은 문자는 제일 앞으로 보낸다. 두 개의 덱 자료구조를 쓰는 이유는 간단하다.(둘 다 모두 덱으로 진행해야 한다. 리스트의 경우엔 po..