Daily Study for Coding Test (02/24 ~ 03/03)

2021. 3. 4. 12:48Study/StudyDaily

728x90

코준 21-02-25

완주하지 못한 선수

https://programmers.co.kr/learn/courses/30/lessons/42576

 

코딩테스트 연습 - 완주하지 못한 선수

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수

programmers.co.kr

import collections
def solution(participant, completion):
	col_participant = collections.Counter(participant)
	col_completion = collections.Counter(completion)
	answer = col_participant - col_completion
	return list(answer.keys())[0]

코준 21-02-25

두개 뽑아서 더하기!

def solution(numbers):
	answer = []
	for i in range(len(numbers)):
		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 sorted(list(set(answer)))

코준 21-02-26

수포자

https://programmers.co.kr/learn/courses/30/lessons/42840

 

코딩테스트 연습 - 모의고사

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

programmers.co.kr

def solution(answers):
    answer = []

    # 반복해서 찍는 패턴
    type1 = [1, 2, 3, 4, 5]
    type2 = [2, 1, 2, 3, 2, 4, 2, 5]
    type3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]

    # 문제 총 수
    total_answer = len(answers)
    
    count_list = [0,0,0]
    # 문제 만큼 찍은 수 만들기
    for i in range(total_answer):
        if answers[i] == type1[i % len(type1)]:
            count_list[0] += 1
        if answers[i] == type2[i % len(type2)]:
            count_list[1] += 1
        if answers[i] == type3[i % len(type3)]:
            count_list[2] += 1

    res_list = list(filter(lambda x: count_list[x] == max(count_list), range(len(count_list))))
    
    for index in res_list:
        answer.append(index+1)

    return answe

코준 21-02-26

K번째수

def solution(array, commands):
    answer = []
    
    for i, command_val in enumerate(commands):
        # 슬라이스 시작 ~ 끝까지
        start = command_val[0] - 1
        end = command_val[1]
        
        temp_array = list(array[start:end])
        temp_array.sort()

        # 정렬 & 선택
        pick = command_val[2] - 1
        answer.append(temp_array[pick])
    return answer

print(solution([1, 5, 2, 6, 3, 7, 4], [[2, 5, 3], [4, 4, 1], [1, 7, 3]]))

코준 21-02-26

체육복

https://rain-bow.tistory.com/entry/Python-프로그래머스-체육복

 

[Python] 프로그래머스 - 체육복

- 문제 설명 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어

rain-bow.tistory.com

https://programmers.co.kr/learn/courses/30/lessons/42862#

 

코딩테스트 연습 - 체육복

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번

programmers.co.kr

def solution(n, lost, reserve):
    answer = 0
    set_reserve = set(reserve) - set(lost)
    set_lost = set(lost) - set(reserve) 

    for i in set_reserve:
        if i-1 in set_lost:
            set_lost.remove(i-1)
        elif i+1 in set_lost:
            set_lost.remove(i+1)
    answer = n-len(set_lost)
    return answer

코준 21-02-27

3진법 뒤집기

https://programmers.co.kr/learn/courses/30/lessons/68935?language=python3

 

코딩테스트 연습 - 3진법 뒤집기

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수

programmers.co.kr

def cycle(numlist, n):
    print(n)
    if n // 3 == 0:
        numlist.append(n)
        return;
    else:
        numlist.append(n%3)
        cycle(numlist, n // 3)

def solution(n):
    answer = 0
    div_number = []
    cycle(div_number, n)

    div_number.reverse()
    div_len = len(div_number)
    for i in range(div_len):
        answer += (3 ** i) * div_number[i] # 3의 n승 곱하기 해당 값 

    return answer

강의 21-03-01

파이썬을 파이썬 답게 강의 완료

https://programmers.co.kr/learn/courses/4008

 

파이썬을 파이썬답게

본 강의는 파이썬 문법을 이미 알고 있는 분들을 대상으로 만들어졌습니다. ##### 이런 분들께 추천합니다 * 파이썬 문법을 알고 계시는 분 * 알고리즘 문제를 조금 더 쉽게 풀고 싶은 분 * Python 코

programmers.co.kr

알고리즘 코딩 테스트 연습1

 

코준 21-03-02

신규 아이디 추천

https://programmers.co.kr/learn/courses/30/lessons/72410

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr

def removeDot(id_list, pos):
    start = 0
    end = len(id_list)-1
    if pos == True or pos == "start": #맨 앞에 마침표 지우기
        if id_list[start] == '.':
            id_list[start] = ''
    elif pos == False or pos == "end":  #맨 뒤에 마침표 지우기
        if id_list[end] == '.':
            id_list[end] = ''
    

def solution(new_id):
    if len(new_id) < 1 or len(new_id) > 1000:
        return ''
    
    answer = ''

    speical_word = "-_.~!@#$%^&*()=+[{]}:?,<>/"
    avalible_speical_word = ['-','_','.']
    reduce_word = [] #제거 되어야 하는 문자열 규칙
    for word in speical_word:
        if word not in avalible_speical_word:
            reduce_word.append(word)

    print(reduce_word)

    # 모든 대문자 소문자로 치환
    change_new_id = new_id.lower()

    print(change_new_id)

    # 특수 문자 제거
    for i in range(len(reduce_word)):
        change_new_id = change_new_id.replace(reduce_word[i],"")

    print(change_new_id)

    # 연속으로 나오는 마침표 압축
    change_new_id = list(change_new_id)
    cnt_word = 0
    for i, end in enumerate(change_new_id):
        if end == '.':
            cnt_word += 1
        else:
            cnt_word = 0

        if cnt_word > 1:
            change_new_id[i] = ''
    change_new_id = list(filter(None, change_new_id)) 
        
    # 처음 or 끝에 마침표는 제거
    removeDot(change_new_id, "start")
    removeDot(change_new_id, "end")
    change_new_id = list(filter(None, change_new_id))

    # new_id가 빈 문자열이면 new_id에 a 대입
    if len(change_new_id) == 0:
        change_new_id.append("a")

    # id 길이가 16자 이상이면 15개 문자 제외 문자들 모두 제거
    if len(change_new_id) >= 16:
        change_new_id = change_new_id[0:15]

    # 마지막 글자가 마침표면 제거
    removeDot(change_new_id, "end")
    change_new_id = list(filter(None, change_new_id))

    # new_id 길이가 2자 이하면 3이 될 때까지 반복
    while len(change_new_id) <= 2:
        change_new_id.append(change_new_id[len(change_new_id)-1])

    answer = ''.join(change_new_id)
    
    return answer

#print(solution("...eqwe@# dasd... @# eq.rwqerqwr!.."))

print(solution("...!.."))

코준 21-03-02

2016년 월, 달 구하기

https://programmers.co.kr/learn/courses/30/lessons/12901

 

코딩테스트 연습 - 2016년

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

programmers.co.kr

def solution(a, b):
    answer = ''
    
    # 윤년이기 때문에 2월은 29
    month_max = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    day_Eng = ["FRI","SAT","SUN","MON","TUE","WED","THU"] # 금요일 부터 시작했기 때문에 기준점 시작을 금요일로 만든다

    # 없는 날은 주어지지 않는다.
    # 1월 1일로 부터 몇일 떨어져 있는가?
    # 5 - 1 = 4, 24 - 1 = 23
    month_to_day = sum(month_max[:(a-1)]) + (b - 1)
    day = month_to_day % 7 # 7일 씩 요일이 바뀌므로 7로 나누어 준다

    print(month_to_day, day)

    answer = day_Eng[day]
    
    return answer

코준 21-03-02

가운데 글자 가져오기

https://programmers.co.kr/learn/courses/30/lessons/12903

 

코딩테스트 연습 - 가운데 글자 가져오기

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다. 재한사항 s는 길이가 1 이상, 100이하인 스트링입니다. 입출력 예 s ret

programmers.co.kr

def solution(s):
    answer = ''

    # 예외
    if len(s) < 1 or len(s) > 100:
        return -1
    
    # 홀 or 짝 판단
    div_check = len(s) % 2
    value_check = len(s) // 2
    print(div_check, value_check)
    if div_check == 0: #짝
        answer = s[value_check-1:value_check+1]
    else:
        answer = s[value_check]

    return answer

코준 21-03-02

두 정수 사이의 합

https://programmers.co.kr/learn/courses/30/lessons/12912

 

코딩테스트 연습 - 두 정수 사이의 합

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 제한 조건 a와 b가 같은 경우

programmers.co.kr

def solution(a, b):
    answer = 0

    # 제한 사항
    # a == b, return a or b
    if a == b:
        return a
    
    # 범위
    if a < -10000000 or a > 10000000 or b < -10000000 or a > 10000000:
        return -1

    # 작은 수 먼저 처리
    if a > b:
        a, b = b, a

    # 식 프로세스
    # a = 3, b = 5
    # 3(a+0), 4(a+1), 5(a+2)
    # 3+4+5 = 3a + (0+1+2) = 3a + (n*(n+1)/2)
    n = b - a
    multi_a = n + 1
    answer = multi_a * a + (n*(n+1)//2)

    return answer

코준 21-03-02

같은 숫자는 싫어

https://programmers.co.kr/learn/courses/30/lessons/12906

 

코딩테스트 연습 - 같은 숫자는 싫어

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은

programmers.co.kr

def solution(arr):
    answer = []

    # 문자열 압축
    temp_ary = -1
    for i,compress in enumerate(arr):
        if temp_ary == -1:
            temp_ary = arr[0]
        else:
            if temp_ary == compress:
                arr[i] = -1
            else:
                temp_ary = arr[i]

    # -1은 중복 값 이므로 제거
    for num in arr:
        if num != -1:
            answer.append(num)        

    return answer

코준 21-03-02

나누어 떨어지는 숫자 배열

https://programmers.co.kr/learn/courses/30/lessons/12910

 

코딩테스트 연습 - 나누어 떨어지는 숫자 배열

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하

programmers.co.kr

def solution(arr, divisor):
    answer = [] 

    # 제한 사항 체크
    for type_arr in arr:
        if type(type_arr) == float:
            return -1

    if type(divisor) == float:
        return -1

    if len(arr) < 1:
        return -1

    arr_list = [i for i in arr if i % divisor == 0]
    answer = sorted(arr_list)

    # 나누어 떨어지는 수가 없으면 -1
    if len(answer) == 0:
        answer = [-1]

    return answer

코준 21-03-03

정수 제곱근 판별

https://programmers.co.kr/learn/courses/30/lessons/12934

 

코딩테스트 연습 - 정수 제곱근 판별

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함

programmers.co.kr

def solution(n):
    answer = 0

    if n > 50000000000000:
        return -1

    val = n ** 0.5
    if val == int(val):
        answer = int((val+1) ** 2)
    else:
        answer = -1

    return answer
def nextSqure(n):
    sqrt = n ** (1/2)

    if sqrt % 1 == 0:
        return (sqrt + 1) ** 2
    return 'no'
def nextSqure(n):
    return n == int(n**.5)**2 and int(n**.5+1)**2 or 'no'

코준 21-03-03

정수 내림차순으로 배치하기

https://programmers.co.kr/learn/courses/30/lessons/12933

 

코딩테스트 연습 - 정수 내림차순으로 배치하기

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다. 제한 조건 n은 1이

programmers.co.kr

def solution(n):
    answer = 0

    if n > 8000000000:
        return -1

    str_temp = sorted(str(n), reverse=True)
    str_temp = ''.join(map(str,str_temp))
    answer = int(str_temp)
    return answer
def solution(n):
    ls = list(str(n))
    ls.sort(reverse = True)
    return int("".join(ls))

코준 21-03-03

자연수 뒤집어 배열로 만들기

https://programmers.co.kr/learn/courses/30/lessons/12932

 

코딩테스트 연습 - 자연수 뒤집어 배열로 만들기

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 제한 조건 n은 10,000,000,000이하인 자연수입니다. 입출력 예 n return 12345

programmers.co.kr

def solution(n):
    answer = []

    if n > 10000000000:
        return -1

    str_temp = list(map(int,list(str(n))))
        
    answer = list(reversed(str_temp))

    return answer
def digit_reverse(n):
    return list(map(int, reversed(str(n))))

코준 21-03-03

자릿수 더하기

https://programmers.co.kr/learn/courses/30/lessons/12931

 

코딩테스트 연습 - 자릿수 더하기

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요. 예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다. 제한사항 N의 범위 : 100,000,000 이하의 자연수 입출

programmers.co.kr

def solution(s):
    answer = 0

    str_temp = sum(map(int,list(str(s))))
        
    answer = str_temp

    return answer

코준 21-03-03

이상한 문자 만들기

https://programmers.co.kr/learn/courses/30/lessons/12930

 

코딩테스트 연습 - 이상한 문자 만들기

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

programmers.co.kr

def solution(s):
    answer = 0
    
    list_str = [''] * len(s)
    cont = 0
    for i , val in enumerate(s):
        if cont % 2 == 0:
            list_str[i] = str(val).upper()
        else:
            list_str[i] = str(val).lower()
        
        if val == ' ':
            cont = -1
        
        cont += 1
    
    answer = ''.join(list_str)

    return answer
def solution(s):
    return " ".join(map(lambda x: "".join([a.lower() if i % 2 else a.upper() for i, a in enumerate(x)]), s.split(" ")))

코준 21-03-03

약수의 합

https://programmers.co.kr/learn/courses/30/lessons/12928

 

코딩테스트 연습 - 약수의 합

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요. 제한 사항 n은 0 이상 3000이하인 정수입니다. 입출력 예 n return 12 28 5 6 입출력 예 설명 입출력 예 #1 12의 약수

programmers.co.kr

def solution(n):
    answer = 0
    
    sum = 0
    for val in range(1,n+1):
        if n % val == 0: # 약수
            sum += val

    answer = sum
    return answer
def solution(n):
    answer = 0
    
    sum = 0
    for val in range(1,n+1):
        if n % val == 0: # 약수
            sum += val

    answer = sum
    return answer

코준 21-03-03

내적

https://programmers.co.kr/learn/courses/30/lessons/70128

 

코딩테스트 연습 - 내적

길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요. 이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의

programmers.co.kr

def solution(a, b):
    answer = 0
    temp = [a * b for a,b in zip(a,b)]
    answer = sum(temp)
    return answer
def solution(a, b):
    return sum(map(lambda i: a[i]*b[i], range(len(a))))

코준 21-03-03

시저 암호

https://programmers.co.kr/learn/courses/30/lessons/12926

 

코딩테스트 연습 - 시저 암호

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀

programmers.co.kr

import string
def solution(s, n):
    answer = ''
    base = ''
    for ch in s:
        if ch in string.ascii_lowercase:
            base = string.ascii_lowercase
        elif ch in string.ascii_uppercase:
            base = string.ascii_uppercase
        else:
            answer += ch
            continue
        a = base.index(ch) + n
        answer += base[a % len(base)]

    return answer
def caesar(s, n):
    s = list(s)
    for i in range(len(s)):
        if s[i].isupper():
            s[i]=chr((ord(s[i])-ord('A')+ n)%26+ord('A'))
        elif s[i].islower():
            s[i]=chr((ord(s[i])-ord('a')+ n)%26+ord('a'))

    return "".join(s)

코준 21-03-03

문자열을 정수로 바꾸기

https://programmers.co.kr/learn/courses/30/lessons/12925?language=python3

 

코딩테스트 연습 - 문자열을 정수로 바꾸기

문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요. 제한 조건 s의 길이는 1 이상 5이하입니다. s의 맨앞에는 부호(+, -)가 올 수 있습니다. s는 부호와 숫자로만 이루어져있습니

programmers.co.kr

def solution(s):
    answer = int(s)
    return answer

코준 21-03-03

수박수박수박수박수박수?

https://programmers.co.kr/learn/courses/30/lessons/12922

 

코딩테스트 연습 - 수박수박수박수박수박수?

길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다. 제한

programmers.co.kr

def solution(n):
    answer = ''

    # limit
    if n < 1 or n > 10000:
        return -1

    samples = ['수','박']
    temp_list = []
    for i in range(n):
        if i % 2 == 0:
            temp_list.append(samples[0])
        else:
            temp_list.append(samples[1])
    
    answer = ''.join(temp_list)

    return answer
def water_melon(n):
    return "수박"*(n//2) + "수"*(n%2)

코준 21-03-03

소수 찾기(에라토스의 체)

https://programmers.co.kr/learn/courses/30/lessons/12921

 

코딩테스트 연습 - 소수 찾기

1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 조건 n은 2이상

programmers.co.kr

def solution(n):
    answer = 0

    # limit
    if n < 2 or n > 1000000:
        return -1

    # 소수는 2부터
    temp_prime_bool_list = [False,False] + [True]*(n-1) # 1, 2는 False로 나머지는 모두 True로
    temp_prime = []
    for i in range(2,n+1):
        if temp_prime_bool_list[i]:
            temp_prime.append(i)
            for j in range(2*i, n+1, i):
                temp_prime_bool_list[j] = False

    answer = len(temp_prime)
    return answer
def solution(n):
    num=set(range(2,n+1))

    for i in range(2,n+1):   
        if i in num:
            num-=set(range(2*i,n+1,i))
    return len(num)

# for i in range(2,n+1): --> for i in range(2,int(n**0.5)+1): 로 바꾸면 계산 횟수가 줄어서 빨라질 것 같습니다.
#num-=set(range(2*i,n+1,i)) --> num -= set(range(i*i,n+1,i)) 같은 관점에서 이렇게도 수정해도 될 것 같습니다.
#num = set(range(3, n+1, 2)); for i in range(3, int(sqrt(n))+1): 으로 하면 효율성이 2~3배 상승합니다
# 소수 판단
def isprime(num):
    if num != 1:
        for i in range(2, num):
            if num % i == 0:
                return False
    else:
        return False

    return True

코준 21-03-03

서울에서 김서방 찾기

https://programmers.co.kr/learn/courses/30/lessons/12919

 

코딩테스트 연습 - 서울에서 김서방 찾기

String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니

programmers.co.kr

def solution(seoul):
    answer = ''
    answer = '김서방은 {0}에 있다'.format(seoul.index("Kim"))
    return answer

코준 21-03-03

문자열 다루기 기본

https://programmers.co.kr/learn/courses/30/lessons/12918

 

코딩테스트 연습 - 문자열 다루기 기본

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다. 제한 사항 s는 길이 1

programmers.co.kr

def solution(s):
    answer = True
    
    # limit
    if len(s) < 1 or len(s) > 8:
        return -1

    # 4 or 6
    print(len(s))
    if len(s) < 4 or len(s) > 6 or len(s) == 5:
        return False
    
    # 숫자로만 구성
    # char 숫자는 아스키 코드로 48('0') ~ 57('9')에 위치하니 해당 값보다 작거나 크면 다른 문자 값이다.
    for value in list(s):
        if ord(value) < 48 or ord(value) > 57:
            answer = False
            break

    return answer
def alpha_string46(s):
    return s.isdigit() and len(s) in (4, 6)
def alpha_string46(s):
    return s.isdigit() and len(s) in (4, 6)

코준 21-03-03

문자열 내림차순으로 배치하기

https://programmers.co.kr/learn/courses/30/lessons/12917

 

코딩테스트 연습 - 문자열 내림차순으로 배치하기

문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요. s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로

programmers.co.kr

def solution(s):
    answer = True

    #limit
    if len(s) < 1:
        return -1

    # 대, 소 분리
    low = []
    upp = []
    for value in s:
        if str(value).islower():
            low.append(value)
        else:
            upp.append(value)

    answer = ''.join(sorted(low, reverse=True) + sorted(upp, reverse=True))

    return answer
def solution(s):
    return ''.join(sorted(s, reverse=True))

코준 21-03-03

문자열 내 p와 y의 개수

https://programmers.co.kr/learn/courses/30/lessons/12916

 

코딩테스트 연습 - 문자열 내 p와 y의 개수

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를

programmers.co.kr

from typing import Counter
def solution(s):
    answer = True

    result_s = str(s)
    result_s = result_s.lower()

    count_result = Counter(result_s)
    #answer = lambda x: True if count_result['p'] == count_result['y'] else False

    if count_result['p'] == count_result['y']:
        answer = True
    else:
        answer = False

    return answer
def numPY(s):
    return s.lower().count('p') == s.lower().count('y')

코준 21-03-03

폰켓몬

https://programmers.co.kr/learn/courses/30/lessons/1845

 

코딩테스트 연습 - 폰켓몬

당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.

programmers.co.kr

def solution(nums):
    answer = 0

    # limit
    if len(nums) < 1 or len(nums) > 10000:
        return -1
    
    # 고를 수 있는 수
    able_pick = len(nums) // 2

    # 중복 없는 포켓몬 수
    not_overlap = len(set(nums))

   # answer =  min(able_pick, not_overlap) 해당 부분은 요렇게 고쳐질 수 있다!
    if able_pick == not_overlap:
        answer = able_pick
    elif able_pick > not_overlap:
        answer = not_overlap
    elif able_pick < not_overlap:
        answer = able_pick
    return answer
def solution(ls):
    return min(len(ls)/2, len(set(ls)))

코준 21-03-03

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

https://programmers.co.kr/learn/courses/30/lessons/12915

 

코딩테스트 연습 - 문자열 내 마음대로 정렬하기

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

programmers.co.kr

https://programmers.co.kr/learn/courses/30/lessons/12915/solution_groups?language=python3

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

def solution(strings, n):
    return sorted(sorted(strings), key=lambda x:x[n])

나는 이런식으로 strings의 n번째 word를 받아서 다시 정렬 후 재정렬 하려고 했는데 다른 사람 풀이는 전체 정렬 후 strings의 n번째 wrod를 받아서 다시 정렬 함..

즉 : 나의 풀이와 반대로 생각해서 적용한것.

def solution(strings, n):
    answer = []

    # limit
    if len(strings) < 1 or len(strings) > 50:
        return -1
    
    low_check =  ''.join(strings)
    if low_check.isupper():
        return -1

    for str in strings:
        if len(str) < 1 or len(str) > 100 or len(str) < n:
            return -1
    
    # process
    dict_str = {}
    list_str = list(strings)
    for i, str in enumerate(list_str):
        dict_str[i] = str[n]

    dict_str_sort = sorted(dict_str.items(),key=(lambda x:x[1]))
    for key, value in dict_str_sort:
        answer.append(strings[key])

    dic_answer = {}
    for i, value in enumerate(answer):
        dic_answer[i] = value

    # sort
    temp = ''
    start = 0
    for i, value in dic_answer.items():
        if temp == '':
            temp = value[n]
        else:
            if temp == value[n]:
                a = sorted(value)
                print(temp, value[n], value)
            else:
                temp = value[n]
                start = i

    return answer
 
728x90

'Study > StudyDaily' 카테고리의 다른 글

Daily Study for Coding Test (03/04)  (0) 2021.03.05
Computer Science  (0) 2021.03.04
Daily Study for Coding Test (02/24 ~ 03/03)  (0) 2021.03.04
1 2 3