seyeon1130 2025. 3. 4. 21:41

41. 이상한 문자 만들기

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

def solution(s):
    answer =''
    for i in range(len(s)) :
        if i %2 == 0 :
            answer+=s[i].upper()
        else : answer+= s[i].lower()
    
    return answer
더보기

lower(), upper() 괄호 꼭 넣기

 

42. 삼총사

한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.

한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요.

def solution(number):
    answer = 0
    for i in range(0,len(number)-2):
        for j in range (i+1,len(number)-1):
            for h in range(j+1,len(number)):
                if number[i]+number[j]+number[h] == 0 :
                    answer+=1
    
    return answer

 

 

 

43. 크기가 작은 부분

숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.

예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다

 

def solution(t, p):
    answer = 0
    a= len(t)
    b =len(p)
    for i in range (a-b+1):
        if int(t[i:i+b])<=int(p):
            answer+=1
            
    return answer

 

44. 최소 직사각형

모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어집니다. 모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 return 하도록 solution 함수를 완성해주세요.

def solution(sizes):
    
    answer = 0
    max1 =[]
    min1 = []
    for i in range(len(sizes)):
        max1.append(max(sizes[i]))
        min1.append(min(sizes[i]))
    answer = max(max1) * max(min1)
    return answer

 

45. 시저 암호

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

 

def solution(s, n):
    result = []
    
    for i in s:
        if i.isalpha():  
            if i.isupper():
                new_char = chr((ord(i) - ord('A') + n) % 26 + ord('A'))
            else:
                new_char = chr((ord(i) - ord('a') + n) % 26 + ord('a'))
            result.append(new_char)
        else:
            result.append(i)
    
    return ''.join(result)

 

더보기

isalpha() 알파벳인지 알려줌

z까지 가도 다시 a로 갈 수 있도록 아스키코드 a를 빼줌 : a부터 0번째 1번째 될 수 있게 %26도 함

다시 a 아스키코드 더해주면서 복원

46. 숫자와 영단어

숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.

 

첫 번째 방법 : match case 문 사용

def solution(s):
    answer = []  # 문자열을 리스트로 저장 (성능 최적화)
    a = ''
    
    for i in s:
        if i.isalpha():
            a += i
            match a:
                case 'zero': answer.append('0'); a = ''
                case 'one': answer.append('1'); a = ''
                case 'two': answer.append('2'); a = ''
                case 'three': answer.append('3'); a = ''
                case 'four': answer.append('4'); a = ''
                case 'five': answer.append('5'); a = ''
                case 'six': answer.append('6'); a = ''
                case 'seven': answer.append('7'); a = ''
                case 'eight': answer.append('8'); a = ''
                case 'nine': answer.append('9'); a = ''
        else:
            answer.append(i)  

    return int(''.join(answer))

-> 파이썬 버전 3.10 이상만 match문 사용 가능해서 다른 방법 이용해야함.

더보기

한 줄에 여러 문장 쓰고 싶을 때는 세미콜론 사용

두 번째 방법

ef solution(s):
    answer = []  
    a = {'zero':'0' , 'one':'1', 'two':'2', 'three':'3', 'four':'4','five':'5','six':'6', 'seven':'7', 'eight':'8', 'nine':'9'}
    b=''
    
    for i in s:
        if i.isalpha():
            b += i
            if b in a :
                answer.append(a[b])
                b=''  
        else:
            answer.append(i)  

    return int(''.join(answer))
더보기

📌 딕셔너리에서 in이 검사하는 대상

  • if key in dict: → 딕셔너리의 키를 확인 (✔ value는 확인 안 함)
  • if value in dict.values(): → 딕셔너리의 값 확인
  • if (key, value) in dict.items(): → (키, 값) 쌍 확인

47.  문자열 내 마음대로 정렬하기

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

def solution(strings, n):
    return sorted(strings, key=lambda x: (x[n],x))
더보기
  • lambda x: (x[n], x)에서 lambda는 하나의 인수만 받음 (x는 각 문자열).
  • lambda는 튜플 ('x[n]', x)를 반환
  • sorted()는 이 튜플을 기준으로 먼저 x[n]을 기준으로 정렬하고, x[n]이 같으면 x (전체 문자열)을 기준으로 정렬

즉, lambda는 하나의 인수만 받고, 두 값은 튜플로 묶어서 반환하여 sorted() 함수가 이를 기준으로 정렬하는 방식

 

결과는 다르지만 map(lambda x: (x[n], x), strings 처럼 sorted가 람다에게 배열을 전달함

.sort() 하면 반환을 하지 않음. 그냥 그 함수 자체가 정렬되는 것

 

48. k번째 수

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

배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

def solution(array, commands):
    answer = []
    a =[]
    for tmp in range(len(commands)):
        i =commands[tmp][0]
        j = commands[tmp][1] 
        h = commands[tmp][2] 
        a=array[i-1:j]
        a.sort()
        answer.append(a[h-1])
    return answer
더보기

a = array[:] 이런식으로 하면 append 나 extend 사용하지 않아도 그냥 배열 자체가 저장됨. 대신 초기화되고 그것만 저장됨.

for command in commands: i, j, h = command

이렇게 하면 행렬의 열들이 각자 순서에 맞게 i ,j,h로 들어감.

49. 두 개 뽑아서 더하기

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

 

def solution(numbers):
    answer = []
    for i in range(len(numbers)-1):
        for j in range(i+1,len(numbers)):
            if numbers[i]+numbers[j] not in answer:
                answer.append(numbers[i]+numbers[j])
    answer.sort()
            
    return answer
더보기

집합은 순서가 없지만 sort는 가능. 따라서 저 코드는 set으로 하는게 더 효율적

50. 가장 가까운 같은 글자

문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다.
예를 들어, s="banana"라고 할 때,  각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다.

최종 결과물은 [-1, -1, -1, 2, 2, 2]가 됩니다.

def solution(s):
    answer = []
    for i in range (len(s)):
        found = False
        a=0
        if i ==0 :
            answer.append(-1)
        else:
            for j in range(i-1,-1,-1):
                a+=1
                if s[i] ==s[j]:
                    answer.append(a)
                    found = True
                    break
            if found == False:
                answer.append(-1)

 

더보기

a를 쓰지 않고 answer.append(i - j) 하면 계산 끝

 

51. 푸드 파이트 대회

수웅이는 매달 주어진 음식을 빨리 먹는 푸드 파이트 대회를 개최합니다. 이 대회에서 선수들은 1대 1로 대결하며, 매 대결마다 음식의 종류와 양이 바뀝니다. 대결은 준비된 음식들을 일렬로 배치한 뒤, 한 선수는 제일 왼쪽에 있는 음식부터 오른쪽으로, 다른 선수는 제일 오른쪽에 있는 음식부터 왼쪽으로 순서대로 먹는 방식으로 진행됩니다. 중앙에는 물을 배치하고, 물을 먼저 먹는 선수가 승리하게 됩니다.

이때, 대회의 공정성을 위해 두 선수가 먹는 음식의 종류와 양이 같아야 하며, 음식을 먹는 순서도 같아야 합니다. 또한, 이번 대회부터는 칼로리가 낮은 음식을 먼저 먹을 수 있게 배치하여 선수들이 음식을 더 잘 먹을 수 있게 하려고 합니다. 이번 대회를 위해 수웅이는 음식을 주문했는데, 대회의 조건을 고려하지 않고 음식을 주문하여 몇 개의 음식은 대회에 사용하지 못하게 되었습니다.

예를 들어, 3가지의 음식이 준비되어 있으며, 칼로리가 적은 순서대로 1번 음식을 3개, 2번 음식을 4개, 3번 음식을 6개 준비했으며, 물을 편의상 0번 음식이라고 칭한다면, 두 선수는 1번 음식 1개, 2번 음식 2개, 3번 음식 3개씩을 먹게 되므로 음식의 배치는 "1223330333221"이 됩니다. 따라서 1번 음식 1개는 대회에 사용하지 못합니다.

수웅이가 준비한 음식의 양을 칼로리가 적은 순서대로 나타내는 정수 배열 food가 주어졌을 때, 대회를 위한 음식의 배치를 나타내는 문자열을 return 하는 solution 함수를 완성해주세요.

def solution(food):
    answer = ""
    
    for i in range(1, len(food)):
        answer += str(i) * (food[i] // 2)
        
    answer = answer + "0" + answer[::-1]  
    return answer

 

더보기

list[::-1] 하면 역순으로 출력됨

a.reverse() 는 반환값없음

reversed(a) 해야함

 

52. 콜라 문제

오래전 유행했던 콜라 문제가 있습니다. 콜라 문제의 지문은 다음과 같습니다.

정답은 아무에게도 말하지 마세요.

콜라 빈 병 2개를 가져다주면 콜라 1병을 주는 마트가 있다. 빈 병 20개를 가져다주면 몇 병을 받을 수 있는가?

단, 보유 중인 빈 병이 2개 미만이면, 콜라를 받을 수 없다. 콜라를 받기 위해 마트에 주어야 하는 병 수 a, 빈 병 a개를 가져다 주면 마트가 주는 콜라 병 수 b, 상빈이가 가지고 있는 빈 병의 개수 n이 매개변수로 주어집니다. 상빈이가 받을 수 있는 콜라의 병 수를 return 하도록 solution 함수를 작성해주세요.

def solution(a, b, n):
    answer = 0
    if n < a:
        return 0
    
    new = (n // a) * b
    remaining = (n % a) + new
    answer = new + solution(a, b, remaining)
    
    return answer

 

53. 명예의 전당 (1)

이 프로그램에서는 매일 "명예의 전당"의 최하위 점수를 발표합니다. 예를 들어, k = 3이고, 7일 동안 진행된 가수의 점수가 [10, 100, 20, 150, 1, 100, 200]이라면, 명예의 전당에서 발표된 점수는 아래의 그림과 같이 [10, 10, 10, 20, 20, 100, 100] 입니다. 명예의 전당 목록의 점수의 개수 k, 1일부터 마지막 날까지 출연한 가수들의 점수인 score가 주어졌을 때, 매일 발표된 명예의 전당의 최하위 점수를 return하는 solution 함수를 완성해주세요.

def solution(k, score):
    answer = []
    tmp =[]
    for i in score:
        
        if len(tmp)>= k and i>min(tmp):
            tmp.remove(min(tmp))
            tmp.append(i)
        elif len(tmp)>= k and i<min(tmp):
            pass
        else : tmp.append(i)
            
        answer.append(min(tmp))
    return answer

 

54. 2016년

2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT입니다. 

import datetime
def solution(a, b):
    w = {
        0:'MON',1:'TUE', 2:'WED', 3:'THU', 4:'FRI', 5:'SAT', 6:'SUN'
    }
    answer = ''
    d = datetime.date(2016,a,b)
    answer = w[d.weekday()]
    
    return answer
더보기

datetime.date() 날짜 객체 생성

date.weekday() 요일이 0~6까지 나옴

 

캘린더를 사용하면

calendar.weekday(y,m,d)

객체 생성 안해도 바로 가능! 이것도 0~6으로 나옴

55. 카드 뭉치

코니는 영어 단어가 적힌 카드 뭉치 두 개를 선물로 받았습니다. 코니는 다음과 같은 규칙으로 카드에 적힌 단어들을 사용해 원하는 순서의 단어 배열을 만들 수 있는지 알고 싶습니다.

문자열로 이루어진 배열 cards1cards2와 원하는 단어 배열 goal이 매개변수로 주어질 때, cards1과 cards2에 적힌 단어들로 goal를 만들 있다면 "Yes"를, 만들 수 없다면 "No"를 return하는 solution 함수를 완성해주세요.

def solution(cards1, cards2, goal):
    for word in goal:
        if cards1 and cards1[0] == word:
            cards1.pop(0)
        elif cards2 and cards2[0] == word:
            cards2.pop(0)
        else:
            return "No"
    return "Yes"

 

56. 과일 장수

과의 최대 점수 k, 한 상자에 들어가는 사과의 수 m, 사과들의 점수 score가 주어졌을 때, 과일 장수가 얻을 수 있는 최대 이익을 return하는 solution 함수를 완성해주세요.

def solution(k, m, score):
    answer = 0
    score.sort(reverse=True)
    while len(score) >= m:
        a=score[:m]
        answer+=min(a)*m
        score = score[m:]

    return answer

 

더보기

a=하고 배열 넣으면 다시 할당 됨. 추가되는게 아니라. 그래서 초기화 안해도 저렇게 가능

57. 모의고사완전탐색

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

def solution(answers):
    a = [1,2,3,4,5]
    b = [2,1,2,3,2,4,2,5]
    c = [3,3,1,1,2,2,4,4,5,5]
    a1=0
    b1=0
    c1=0
    answer=[]
    for i in range(len(answers)):
        a.append(a[i])
        b.append(b[i])
        c.append(c[i])
    for i in range(len(answers)):
        if answers[i] == a[i] :
            a1+=1
        if answers[i] == b[i] :
            b1+=1
        if answers[i] == c[i] :
            c1+=1
    maxx = max(a1,b1,c1)
    if a1== maxx:
        answer.append(1)
    if b1 == maxx:
        answer.append(2)
    if c1 == maxx:
        answer.append(3)
    
    return answer
더보기

a[a] =a 이런식으로 할당 안됨. 저거는 값 바꿀때만!

a[a].append 안됨. a.append만 가능. 만약 2차배열이면 모를까

 

if answers[i] == a[i % len(a_pattern)]: a_count += 1 

이러면 끝인데 내가 너무 길게 씀

 

큰수%작은수 -> 빼기

작은수 % 큰수 ->작은수가 나옴

%(모듈로, 나머지 연산자)를 사용하면 인덱스가 a의 길이를 넘어가더라도 다시 0부터 시작

58. 소수 만들기

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.

import itertools
def solution(nums):
    answer = 0
    arr = itertools.combinations(nums,3)
    sum_arr = [sum(s) for s in arr]

    for i in sum_arr:
        a= False
        for j in range (2,i):
            if i%j == 0:
                a=True
                break
        if a == False :
            answer+=1
 
    return answer

 

59. 덧칠하기

정수 nm과 다시 페인트를 칠하기로 정한 구역들의 번호가 담긴 정수 배열 section이 매개변수로 주어질 때 롤러로 페인트칠해야 하는 최소 횟수를 return 하는 solution 함수를 작성해 주세요.

import math
def solution(n, m, section):
    answer = 0
    a = max(section)-min(section) +1
    answer = math.ceil(a/m) 
    return answer

 

60. 기사단원의 무기

숫자나라 기사단의 각 기사에게는 1번부터 number까지 번호가 지정되어 있습니다. 기사들은 무기점에서 무기를 구매하려고 합니다. 기사단원의 수를 나타내는 정수 number와 이웃나라와 협약으로 정해진 공격력의 제한수치를 나타내는 정수 limit와 제한수치를 초과한 기사가 사용할 무기의 공격력을 나타내는 정수 power가 주어졌을 때, 무기점의 주인이 무기를 모두 만들기 위해 필요한 철의 무게를 return 하는 solution 함수를 완성하시오.

 

def solution(number, limit, power):
    answer = 0
    attack = is_leaf(number)
    over = over_limit(attack,limit)
    if over :
        for i in over:
            attack.pop(i)
            attack.insert(i,power)
    answer = sum(attack)  
    
        
    return answer

def over_limit(num,limit):
    a=[]
    for i in range(len(num)):
        if num[i]  > limit :
            a.append(i)
    return a

    
def is_leaf(num):
    c =[]
    for i in range(1,num+1):
        a = False
        b=0
        for j in range(1,i+1):
            if i%j == 0 : b+=1
        c.append(b)
            
    return c

 

더보기

이렇게 하면 훨씬 간단하게 끝냄. 난 왤케 한줄 쓰는게 어렵냐

def over_limit(num, limit, power):
    return [power if n > limit else n for n in num]

 

함수에서 배열을 매개변수로 받을 때 배열[] 이런식으로 안받음. 그냥 이름쓰면 됨

61. 로또의 최고 순위와 최저 순위

민우가 구매한 로또 번호를 담은 배열 lottos, 당첨 번호를 담은 배열 win_nums가 매개변수로 주어집니다. 이때, 당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아서 return 하도록 solution 함수를 완성해주세요.

def how(num):
    if num ==6:
        return(1)
    elif num ==5:
        return(2)
    elif num ==4:
        return(3)
    elif num ==2:
        return(5)
    else:
        return(6)
    
def solution(lottos, win_nums):
    answer = []
    yes=0
    no=0
    for i in lottos:
        if i ==0:
            no+=1
        elif i in win_nums:
            yes+=1
    answer.append(how(yes+no))
    answer.append(how(yes))
        
    
    return answer
더보기

def how(num):
    rank = {6: 1, 5: 2, 4: 3, 3: 4, 2: 5}
    return rank.get(num, 6) #default는 6

def solution(lottos, win_nums):
    yes = sum(1 for x in lottos if x in win_nums)
    no = lottos.count(0)
    
    return [how(yes + no), how(yes)]

 

이건 gpt 답

62. 옹알이

머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

def solution(babbling):
    answer = 0
    can = ["aya", "ye", "woo", "ma"]
    count=0
    for i in babbling:
        if ('ayaaya'in i) or ('yeye' in i) or ('woowoo'in i) or ('mama'in i) :
            continue
        for j in can:
            if j in i:
                i= i.replace(j,'')
        if not i:
            answer+=1
        
    return answer
더보기

공백 제거 : i.strip()

공백만 있으면 not i 하면 true

63. 숫자 짝꿍

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

두 정수 XY의 임의의 자리에서 공통으로 나타나는 정수 k(0 ≤ k ≤ 9)들을 이용하여 만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라 합니다(단, 공통으로 나타나는 정수 중 서로 짝지을 수 있는 숫자만 사용합니다). XY의 짝꿍이 존재하지 않으면, 짝꿍은 -1입니다. XY의 짝꿍이 0으로만 구성되어 있다면, 짝꿍은 0입니다. 두 정수 XY가 주어졌을 때, XY의 짝꿍을 return하는 solution 함수를 완성해주세요.

 

def solution(X, Y):
    answer = []
    x = str(X)
    y = str(Y)
    
    for i in range(len(x)-1,-1,-1):
        for j in range(len(y)-1,-1,-1):
            if x[i] == y[j]:
                answer.append(x[i])
                x=x.replace(x[i],'',1)
                y=y.replace(y[j],'',1)
                break
                
    if not answer: return '-1'
    answer.sort(reverse=True)
    answer = ''.join(answer)
    
    if answer[0] == '0' : return '0'
    

    return answer
더보기

길이가 계속 바뀌는 식의 배열을 사용할 때는 끝에서부터 비교하는 것이 좋다.

문자열은 sort못한다.

문자열을 계속 바꾸는 것은 위험할 수 있음. 따라서 문자열 말고 배열을 사용해야함.

def solution(X, Y):
    answer = []
    x = list(str(X)) 
    y = list(str(Y))  

    for i in range(len(x)-1, -1, -1):  
        for j in range(len(y)-1, -1, -1):
            if x[i] == y[j]:
                answer.append(x[i])
                x.pop(i)  
                y.pop(j)
                break

    if not answer:  
        return -1

    answer.sort(reverse=True)
    answer = ''.join(answer)

    if answer[0] == '0': 
        return '0'

    return answer

 

64. 체육복

전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성해주세요.

def solution(n, lost, reserve):
    answer = n-len(lost)
    
    for i in reserve :
        if i in lost :
            lost.remove(j)
            reserve.remove(i)
            
    for j in reserve:
        if j+1 in lost:
            answer+=1
            lost.remove(j+1)
        elif j-1 in lost:
            answer+=1
            lost.remove(j-1)
    return answer