문제풀이 324

[백준][투포인터] - 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 부분만 지..

[프로그래머스][조합] - 메뉴 리뉴얼

from itertools import combinations from collections import Counter def solution(orders, course): answer = [] for c in course: tmp = [] for order in orders: combi = combinations(sorted(order),c) tmp += combi cnt = Counter(tmp) #해당 메뉴가 없거나 해당 메뉴를 1명만 주문한 것이 아니라면 if len(cnt) != 0 and max(cnt.values())!=1: #해당 메뉴가 최대로 주문받은 경우에만 돌려줌 answer += [''.join(f) for f in cnt if cnt[f]==max(cnt.values())] ret..

[프로그래머스] - 문자열 다루기 기본

def solution(s): answer = True if len(s) == 4 or len(s) == 6: for i in s: if not i.isdecimal(): answer = False else: answer = False return answer 길이가 4에서 6 사이의 문자열을 확인하는 것이기에 초기 조건으로 길이를 확인하고 길이가 이에 해당하지 않으면 False를 돌려준다. 이때 길이가 4, 6인 경우엔 for문을 도는데 이때 하나라도 숫자가 아닌 문자가 발견되면 False를 돌려준다.

[프로그래머스][구현] - 시저 암호(파이썬/python)

문제 풀이 def solution(s, n): answer = '' for i in s: if i.islower(): answer += chr((ord(i)-ord('a')+n) % 26 +ord('a')) elif i.isupper(): answer += chr((ord(i)-ord('A')+n) % 26 + ord('A')) else: answer += " " return answer 판별해야 하는 경우는 대문자, 소문자, 띄어쓰기 세가지 경우로 나뉜다. 소문자인 경우 해당 문자를 유니코드로 바꾼 뒤 다시 문자로 돌려준다. 이때 z에서 a로 다시 돌아가는 부분의 문제를 해결해주기 위해서 %26(알파벳이 25개니 26이 1로 다시 돌아가게 하기 위함이다.) 대문자일 경우도 소문자처럼 위와 동일한 로직이..