목록프로그래머스/1단계 (30)
연습장
n개의 질문 - 7개의 선택지이며 AN 의 경우 1-3 : A 의 점수 / 4 : 0 점 / 5-7 : N 의 점수 AN 5 이므로 N 1점 (네오형 1점) 으로 볼 수 있다. 그리고 NA 5 가 있으므로 A 1점 (어피치형 1점) 으로 볼 수 있다 다음과 같이 요약할 수 있으며 T C M 에 동점인 A와 M 중 사전순으로 빠른 A 가 오게되어서 TCMA 가 된다. survey 의 문자와 choice 의 숫자에 따라서 RT / CF / JM / AN 에 대해서 각각의 점수를 얻고 종합한 4자리 문자를 출력하는게 목표이다. survey를 하나씩 꺼내서 맨 앞자리에 따라서 1-3 까진 + 이고 4는 0 5-7은 - 이므로 4 - choices[i] 를 적용하면 +3 점부터 -3 점까지 가능하다. RT의 기준..
1단계 -> lower 사용 2,3,4단계 -> 정규 표현식 이용 5, 6 , 7단계 -> 길이 len 이용 정규표현식은 문자열을 처리할때 사용할 수 있다. re 모듈을 import 하며 re.sub(패턴, 대체할문자, 확인할문자열 ) ## replace 와 비슷하게 생각 할 수 있다. 각 단계를 보면서 필요한 코드를 짜 넣는다. def solution(new_id): import re # 1단계 new_id = new_id.lower() # 소문자로 # 2단계 new_id = re.sub('[^a-z0-9-_.]', '', new_id) # 기준에 따른 문자 변환 # 3단계 new_id = re.sub('\.{2,}', '.', new_id) # .. 이상 . 으로 변환 # 4단계 new_id = re..
빵 - 야채 - 고기 - 빵 순서 1231 을 1개의 값으로 한다. 2 1 1 2 3 1 2 3 1 2 1 2 3 1 2 총 2개 의 햄버거를 만들게 된다. 1. 주어진 배열의 앞에서부터 1231 이라는 순서가 나오게 되면 2. 기존 배열에서 제거하고 3. result 를 1 더하면 될거같다. 4. 그리고 제거 된 배열을 사용하여 1-3 을 반복 def solution(ingredient): answer = 0 b = "" for i in ingredient: b += str(i) while "1231" in b: b = b.replace("1231", "") answer += 1 return answer 테스트 케이스에 실패가 나오는것으로 보아 재료를 다 쌓고 하는게 아닌 쌓는 동시에 1231 이 되는..
[1,4,7] - 왼손 [3,6,9] - 오른손 [2,5,8,0] - 가까운쪽 손 거리가 같으면 hand 인 손 상하좌우로 거리 1 , 대각 2 1번 - 1.4,7 의 경우 - 왼손 고정 2번 - 3,6,9 의 경우 - 오른손 고정 def solution(numbers, hand): answer = '' for i in numbers: if i in [1,4,7]: # 1번 answer += "L" elif i in [3,6,9]: # 2번 answer +="R" else : answer +="?" return answer 3번 - 2, 5, 8, 0 -> 현재 키패드 에서 가까운 손 -> 현재 L과 R 의 위치를 알아야되며 - 목표 위치까지의 거리를 비교 - 작은쪽 또는 거리가 같으면 hand 인 손 ..
맨위에서부터 뽑을 수 있으며 뽑은 인형중 같은거 2개가 될경우 사라진다. moves 의 원소값에 따라서 0 이 아닌 숫자를 하나씩 가져오게된다. 15351214 ->43113204 가 되며 연속된 숫자는 사라지게되며 0 또한 무시해도된다. -> 43324 -> 424 즉 11과 33 이 사라졌으며 result 값은 4가 된다. 1. 빈배열에 원소들을 잘 뽑아서 넣기 2. 몇개가 터트려지는지 확인 def solution(board, moves): answer = 0 num_list = [] # 1회 뽑는 방법 h = 0 # 높이 w = 0 # 뽑을 x 축 좌표 while True: if board[h][w] == 0: # 0 일경우 한칸 더 내려감 h +=1 else : num_list.append(boa..
내가 고른 칸과 상하좌우 4칸의 색 중에서 몇개가 같은지를 알아보는 문제이다. board 는 다음과 같이 2중 배열로 주어진다. [["blue", "red", "orange", "red"], ["red", "red", "blue", "orange"], ["blue", "orange", "red", "red"], ["orange", "orange", "red", "blue"]] board[h][w] 의 색을 확인하고 board[h-1][w] board[h+1][w] board[h][w+1] board[h][w-1] 각각의 색을 확인해서 갯수를 알려주면 된다. 이렇게 테두리 값을 고를 경우에 대해서 예외 처리가 필요하다. # 선택한 기준 색 color = board[h][w] if h-1 >= 0 : # 상..
문제해석 abcde fghij klmno pqrst uvwxy z a 기준 index 5 만큼 뒤의 알파벳은 -> b c d e f -> f 이지만 skip 에 b d 가 있으므로 2칸 더 이동한 h 가 된다. u -> z 이지만 skip w 1칸 -> a k -> p s -> x 지만 skip w 1칸 -> y happy 가 된다. 문제를 해결하기 위해선 abcdefg 의 알파벳 순서를 컴퓨터에게 알려주어야한다. 2가지 방법이 있다. 1. str = " abcdefghijklmnopqrstuvwxyz" 의 문자열을 변수로 만들어서 사용하는 방법 2. 아스키 코드를 사용하는 방법 print(ord("a")) # 97 print(ord("z")) # 122 "a" 의 5번째 뒤의 알파벳을 확인하는 코드는 ..
N : 전체 스테이지 갯수 stages : 유저의 현재 진행중인 stage 단계 result : 실패율이 높은 순서부터, 같을 경우 더 낮은 stage 부터 case 1 의 경우 stages[0] = 2 는 1번째 유저가 2stage에 도전하고 있다는 뜻이다. stages[3] = 6 는 4번째 유저가 모든 stage 를 클리어 했다는 뜻이다. 실패율 해당 stage 에 도전중인 유저 수 / 이전 stage 를 클리어한 유저 수 stage 1 = 1/8 stage 2 = 3/7 stage 3 = 2/4 stage 4 = 1/2 stage 5 = 0/1 이며 3,4 가 0.5로 가장 높은 실패율을 가지므로 result = [ 3, 4 .. ] 에 그 다음 실패율을 가지는 2stage result = [3,..
n 은 전체 벽의 갯수 m 은 룰러의 길이 section 은 빈곳 (칠해야 되는곳) result 는 룰러 횟수 1번 예시를 보면 2 3 6 을 칠하기 위해서 길이 4 짜리 룰러로 총 2번 해야된다 라는 뜻입니다. 만약 다음과 같은 예시 n = 8, m = 3 , section = [1,3,5,7] 의 경우 1-3 , 5-7의 영역을 총 2번 칠하게 된다. 즉, 붓이 시작하는 지점이 어디이며 몇번 칠하는지 구하면 된다. 1회 : 시작 1 -> 끝 3 2회 : 시작 5 -> 끝 7 def solution(n, m, section): # 처음 1회 시작 start = section[0] end = start - 1 + m answer = 1 # section 의 원소값에 따라 for area in sectio..
2 부터 n 까지 각 숫자가 소수인지 판단해야된다. 간단하게 생각해보면 1. 소수인지 아닌지 판단하는 함수를 만든다. 2. n 보다 작은 수에 대해서 1의 함수를 각각 적용하여 갯수를 샌다 로 다음과 같다. # 소수인지 확인하는 함수 def prime_num(n): for i in range(2,n): if n%i == 0: return 0 return n def solution(n): answer = 0 for i in range(n+1): if prime_num(i) > 1: answer +=1 return answer 그러면 예상하는 바와 같이 시간초과에 걸리게 된다. 현재 for 문을 2번 사용해서 시간 복잡도가 O(n^2) 정도 된다. 이와 관련된 해결방법으로 '3. 기사단원의 무기' 라는 글에..