본문 바로가기

PS/programmers

(28)
당신은 얼마나 세심하게 공백을 구분할 수 있습니까 공백으로 구분된 문자열에 대한 글입니다. split()을 사용하면, 공백의 개수에 상관없이 공백을 뭉뚱그려서 하나로 취급하고 문자열 앞, 뒤의 공백도 무시하게 됩니다. 즉, 공백과 단어가 섞여있는 문자열에서 단어만 뽑아내고 싶을 때 사용합니다. 하지만, 공백이 1칸인지 2칸인지, 그리고 문자열의 앞의 공백, 끝의 공백을 알아야 한다면 split(" ")을 사용하면 됩니다. 관련 문제로 프로그래머스 '이상한 문자 만들기'가 있습니다. 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr
[프로그래머스] 양과 늑대 특정 노드에서, 다른 노드로 어떻게 이동하지?? 가 제일 큰 고민거리였습니다. 예를 들어 0->1을 간 상황이라면, 다음에 이동할 수 있는 노드가 2, 4, 8인데 2, 4는 자식 노드들이고, 8은 거슬러 올라가야 하는데 어떻게 가지? 라는 생각을 했습니다. 그런데, 갈 수 있는 노드들의 공통점은 "해당 노드의 부모 노드는 방문했고, 해당 노드는 방문하지 않은 상태"일 때 갈 수 있었습니다. (풀이 2번) 또는, 0번 노드에 있을 때 다음으로 갈 수 있는 노드들은 0번 노드의 자식들인 1, 8이고 1로 이동했을 때 갈 수 있는 노드들은 기존 갈 수 있던 1,8에서 1(지금 도착한 노드)를 제외한 8번 노드 + 1번 노드의 자식들인 2, 4번 노드입니다. (풀이 1번) 풀이1 import sys sys.s..
[프로그래머스] 미로 탈출 명령어 import sys sys.setrecursionlimit(10**6) def solution(n, m, x, y, r, c, k): dx = [1, 0, 0, -1] #남서동북 dy = [0, -1, 1, 0] info = { 0 : 'd', 1 : 'l', 2 : 'r', 3 : 'u' } res = "impossible" flag = False visited = [] def dfs(i, j, cnt): nonlocal res, flag, visited if flag : return #k안으로 어차피 못갈 바에 return if abs(r-i)+abs(c-j)+cnt > k: return #도착했으면 flag로 막아주기 if cnt == k and i == r and j == c: res = ''.j..
[프로그래머스] 택배상자 파이썬 풀이 되게 간단한 stack문제 같아 보였는데.. 되게 은근 생각하기 힘들었습니다. 무조건 stack에 넣었다가 빼야 풀 수 있었습니다..!!! def solution(order): answer = 0 loadIdx = 0 arrival = [i for i in range(1, len(order)+1)] stack = [] for item in arrival: stack.append(item) while stack[-1] == order[loadIdx]: stack.pop() answer += 1 loadIdx += 1 if not stack: break return answer
[프로그래머스] 롤케이크 자르기 파이썬 풀이 처음에는 아래와 같이 풀었는데 시간 초과가 납니다. def solution(topping): answer = 0 length = len(topping) for i in range(1, length-1): chul, bro = topping[0:i], topping[i:length] if len(set(chul)) == len(set(bro)): answer += 1 return answer 아래는 정답 코드입니다. from collections import Counter def solution(topping): answer = 0 topping_counter = Counter(topping) topping_set = set() for top in topping: topping_counter[top]..
[프로그래머스] 멀리 뛰기 파이썬 문제 효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는 (1칸, 1칸, 1칸, 1칸) (1칸, 2칸, 1칸) (1칸, 1칸, 2칸) (2칸, 1칸, 1칸) (2칸, 2칸) 의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면, 5를 return하면 됩니다. 풀이 딱 봐도 익숙한 유형입니다. 예전에 수학 문제 풀 때 많이 나왔던... 그런데 머리로는 생각이 잘 되는데 코드를 구현하자니 어렵습니다. 결국 이 문제도 dp문제입니..
[프로그래머스] 시저암호 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.제한 조건 공백은 아무리 밀어도 공백입니다. s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다. s의 길이는 8000이하입니다. n은 1 이상, 25이하인 자연수입니다. 풀이 처음에 생각한 풀이는, 1) 문자열 s의 길이를 저장해두고, 2) 문자열 s의 맨 앞 알파벳만 숫자로 바꾼 후 그것에 n을 더하고 아까 저장한 길이만큼 알파벳으로 출력해주는 방식 이었지만 공백..
[프로그래머스] 실패율 파이썬 문제 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다. 이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하라. 실패율은 다음과 같이 정의한다. 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수 전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 ..