코딩테스트 준비

양진혁·2022년 3월 18일
0

문제풀이

문제1

프로그래머스 level1 k번째 수

문제 설명
배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.

예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
2에서 나온 배열의 3번째 숫자는 5입니다.
배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한사항
array의 길이는 1 이상 100 이하입니다.
array의 각 원소는 1 이상 100 이하입니다.
commands의 길이는 1 이상 50 이하입니다.
commands의 각 원소는 길이가 3입니다.

입출력 예

arraycommandsreturn
[1, 5, 2, 6, 3, 7, 4][[2, 5, 3], [4, 4, 1], [1, 7, 3]][5, 6, 3]
def solution(array,commands):
  res = []
  for i in range(len(commands)):
    el = []
    el= sorted(array[commands[i][0]-1:commands[i][1]])
    res.append(el[commands[i][2]-1])
  return res

문제 2

프로그래머스 level1 모의고사

문제 설명
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.

1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한 조건
시험은 최대 10,000 문제로 구성되어있습니다.
문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

입출력 예

answersreturn
[1,2,3,4,5][1]
[1,3,2,4,2][1,2,3]
def solution(answer):
#수포자의 답변을 각 리스트에 저장
  a1 = [1,2,3,4,5]
  a2 = [2,1,2,3,2,4,2,5]
  a3 = [3,3,1,1,2,2,4,4,5,5]
  #수포자가 정답 맞춘 횟수를 저장할 리스트 작성
  score = [0,0,0]
  for i in range(len(answer)):
    if answer[i] == a1[i%len(a1)]:
      score[0] +=1
    if answer[i] == a2[i%len(a2)]:
      score[1] +=1
    if answer[i] == a3[i%len(a3)]:
      score[2] +=1
  res = []
  #enumerate를 사용해서 가장 높은 점수의 사람을 출력
  for idx, s in enumerate(score):
    if s == max(score):
      res.append(idx+1)
  return res

문제3

프로그래머스 level2 소수찾기

문제 설명
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.

각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.

제한사항
numbers는 길이 1 이상 7 이하인 문자열입니다.
numbers는 0~9까지 숫자만으로 이루어져 있습니다.
"013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.

입출력 예

numbersreturn
"17"3
"011"2
from itertools import permutations
import math
def solution(numbers):
  result = []
  per_list=[]
  for i in range(1,len(numbers)+1):
    #nums에 숫자를 쪼개서 값을 넣어줌
    nums = [i for i in numbers]
    # 순열을 통해서 길이가 1~ numbers 길이만큼의 수열을 만든 후 리스트에 넣어줌
    per_list+=permutations(nums,i)
  #join함수를 이용해서 튜플을 제거해주고 set을 이용해서 중복제거
  new_nums = list(set([int(("").join(i))for i in per_list]))
  #소수 판별
  for i in new_nums:
    confirm = True
    if i <2:
      confirm = False
    #math.sqrt()를 사용해서 구하려고 하는 i의 제곱근까지 확인
    for j in range(2,int(math.sqrt(i))+1):
      if i % j == 0:
        confirm = False
        break
    #만약 i가 소수라면 결과 리스트에 i를 넣어주고 그 길이를 return
    if confirm == True:
      result.append(i)
  return len(result)

문제 4

프로그래머스 level1 가운데글자 가져오기

문제 설명
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

재한사항
s는 길이가 1 이상, 100이하인 스트링입니다.

입출력 예

sreturn
"abcde""c"
"qwer""we"
def solution(s):
  if len(s)%2 ==1:
    return s[len(s)//2]
  else:
    return s[int(len(s)/2)-1] + s[int(len(s)/2)]

문제5

프로그래머스 level1 두개 뽑아서 더하기

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.

제한사항
numbers의 길이는 2 이상 100 이하입니다.
numbers의 모든 수는 0 이상 100 이하입니다.

입출력 예

numbersresult
[2,1,3,4,1][2,3,4,5,6,7]
[5,0,2,7][2,5,7,9,12]
from itertools import permutations
def solution(numbers):
  #순열을 이용해서 두개씩 쌍을 맞춤
  arr=list(permutations(numbers,2))
  #튜플을 리스트로 변환 후 sum을 통해 더한 후 set을 통해 중복을 제거하고 
  #sorted를 통해 오름차순으로 변경
  res =sorted(list(set([sum(list(i)) for i in arr])))
  return res

0개의 댓글