[Python] 코딩 기초 트레이닝91~124

NAYOUNG KIM·2023년 10월 6일
0

코딩테스트

목록 보기
5/13
post-thumbnail
# 91.문자열이 몇 번 등장하는지 세기
def solution(myString, pat):
    answer = 0
    pat_len = len(pat)
    for i in range(len(myString)):
        if myString[i:i+pat_len] == pat:
            answer += 1 
    return answer
    
# 92.간단한 논리 연산
def solution(x1, x2, x3, x4):
    tmp_1 = True if (x1==True) or (x2==True) else False
    tmp_2 = True if (x3==True) or (x4==True) else False
    answer = False if (tmp_1==False) or (tmp_2==False) else True
    return answer
    
# 93.배열의 길이를 2의 거듭제곱으로 만들기
def solution(arr):
    arr_len = len(arr)
    cnt = 0
    while arr_len > 1:
        arr_len = arr_len/2
        cnt += 1
    
    if len(arr) != 2 ** cnt:
        cnt_zero = 2**cnt - len(arr)
        for i in range(cnt_zero):
            arr.append(0)
    return arr

# 94.문자열 반복해서 출력하기
a, b = input().strip().split(' ')
b = int(b)
str = ''
for i in range(b):
    str += a
print(str)

# 95.수열과 구간 쿼리 4
def solution(arr, queries):
    answer = arr
    for query in queries:
        s, e, k = query[0], query[1], query[2]
        for i in range(s, e+1):
            if i % k == 0:
                answer[i] += 1
    return answer

# 96.2의 영역
def solution(arr):
    answer = []
    idx_list = []
    if 2 not in arr:
        answer.append(-1)
        return answer
    else:
        for i in range(len(arr)):
            if arr[i] == 2:
                idx_list.append(i)
        
        if len(idx_list) == 1:
            idx = idx_list[0]
            answer.append(arr[idx])
        else:
            s_idx, e_idx = idx_list[0], idx_list[-1]
            for j in range(s_idx, e_idx+1):
                answer.append(arr[j])
        return answer
        
# 97.문자열 묶기
def solution(strArr):
    str_len_list = [len(str) for str in strArr]
    cnt_list = []
    for str_len in set(str_len_list):
        cnt_list.append(str_len_list.count(str_len))
        answer = max(cnt_list)
    return answer

# 98.리스트 자르기
def solution(n, slicer, num_list):
    a, b, c = slicer[0], slicer[1], slicer[2]
    answer = []
    if n == 1:
        answer = num_list[:b+1]
    elif n==2:
        answer = num_list[a:]
    elif n==3:
        answer = num_list[a:b+1]
    else:
        answer = num_list[a:b+1:c]
    return answer

# 99.커피 심부름
def solution(order):
    answer = 0
    for x in order:
        if "americano" in x:
            answer += 4500
        elif "cafelatte" in x:
            answer += 5000
        else:
            answer += 4500
    return answer

# 100.조건에 맞게 수열 변환하기 2
def solution(arr):
    answer = 0
    old = arr

    while (True):
        new = []
        for num in old:
            if (num >= 50) and (num%2==0):
                num = num / 2
            elif (num < 50) and (num%2==1):
                num = (num * 2) + 1
            new.append(int(num))
            
        if old == new:
            break
        else:
            answer += 1
            old = new          
    return answer

# 101.qr code
def solution(q, r, code):
    answer = ''
    for i in range(len(code)):
        if i % q == r:
            answer += code[i]
    return answer

# 102.특수문자 출력하기
print("!@#$%^&*(\\'\"<>?:;")

# 103.문자 개수 세기
def solution(my_string):
    answer = [0] * 52
    dic = {'A':0,'B':1,'C':2,'D':3,'E':4,'F':5,'G':6,'H':7,'I':8,'J':9,
           'K':10,'L':11,'M':12,'N':13,'O':14,'P':15,'Q':16,'R':17,'S':18,'T':19,
           'U':20,'V':21,'W':22,'X':23,'Y':24,'Z':25,'a':26,'b':27,'c':28,'d':29,
           'e':30,'f':31,'g':32,'h':33,'i':34,'j':35,'k':36,'l':37,'m':38,'n':39,
           'o':40,'p':41,'q':42,'r':43,'s':44,'t':45,'u':46,'v':47,'w':48,'x':49,
           'y':50,'z':51}
    
    for str in my_string:
        for key, value in dic.items():
            if str == key:
                answer[value] += 1
    return answer

# 104.배열 만들기 4
def solution(arr):
    stk = []
    i = 0
    while i < len(arr):
        if stk == []:
            stk.append(arr[i])
            i += 1
        elif stk[-1] < arr[i]:
            stk.append(arr[i])
            i += 1
        elif stk[-1] >= arr[i]:
            stk = stk[:-1]
    return stk
    
# 105.두 수의 합
def solution(a, b):
    answer = str(int(a) + int(b))
    return answer
    
# 106.왼쪽 오른쪽 
def solution(str_list):
    for i in range(len(str_list)):
        if str_list[i]=='l':
            answer = str_list[:i]
            return answer
        elif str_list[i]=='r':
            answer = str_list[i+1:]
            return answer
        
    if ('l' not in str_list) and ('r' not in str_list):
        answer = []
        return answer
    
# 107.배열 만들기 6     
def solution(arr):
    stk = []
    i = 0
    while i < len(arr):
        if stk == []:
            stk.append(arr[i])
            i += 1
        elif stk[-1] == arr[i]:
            stk = stk[:-1]
            i += 1
        elif stk[-1] != arr[i]:
            stk.append(arr[i])
            i += 1   
    if stk == []:
        stk.append(-1)
    return stk 
 
# 108.수 조작하기 2 
def solution(numLog):
    answer = ''
    for i in range(1, len(numLog)):
        if (numLog[i] - numLog[i-1]) == 1:
            answer += 'w'
        elif (numLog[i] - numLog[i-1]) == -1:
            answer += 's'
        elif (numLog[i] - numLog[i-1]) == 10:
            answer += 'd'
        elif (numLog[i] - numLog[i-1]) == -10:
            answer += 'a'
    return answer 
 
# 109.문자열 여러 번 뒤집기
def solution(my_string, queries):
    new = ''
    old = my_string
    for query in queries:
        s, e = query[0], query[1]
        new = []  
        new = old[:s]
        for i in range(e, s-1, -1):
            new += old[i]
        new += old[e+1:]
        old = new
    return new

# 110.수열과 구간 쿼리 2
def solution(arr, queries):
    answer = []
    for query in queries:
        s, e, k = query[0], query[1], query[2]
        tmp = 1000001
        tmp_arr = arr[s:e+1]
        for num in tmp_arr:
            if (num>k) and (tmp>num):
                tmp = num
        if tmp == 1000001:
            answer.append(-1)
        else:
            answer.append(tmp)
    return answer

# 111.조건 문자열
def solution(ineq, eq, n, m):
    if ineq=='>' and eq=='=':
        answer = 1 if n >= m else 0
    elif ineq=='<' and eq=='=':
        answer = 1 if n <= m else 0    
    elif ineq=='>' and eq=='!':
        answer = 1 if n > m else 0 
    elif ineq=='<' and eq=='!':
        answer = 1 if n < m else 0 
    return answer

# 112.무작위로 K개의 수 뽑기
def solution(arr, k):
    answer = []
    for i in range(len(arr)):
        if (arr[i] not in answer) & (len(answer)<k):
            answer.append(arr[i])
    if len(answer) < k:
        for j in range(k-len(answer)):
            answer.append(-1)   
    return answer

# 113.정사각형으로 만들기
def solution(arr):    
    answer = [[]]
    x = len(arr)
    y = len(arr[0])
    
    if x == y :
        answer = arr
    else: 
        if x < y:
            answer = arr
            for i in range(y-x):
                tmp = [0 for j in range(y)]
                answer.append(tmp) 
        else:
            for i in range(x):
                tmp = arr[i]
                cnt = x-y
                for j in range(cnt):
                    tmp.append(0)
                answer.append(tmp) 
            answer = answer[1:]
    return answer

# 114.a와 b 출력하기
a, b = map(int, input().strip().split(' '))
print('a', '=', a)
print('b', '=', b)

# 115.그림 확대
def solution(picture, k):
    answer = []
    for row in picture:
        resized = ''
        for pixel in row:
            resized += pixel * k   
        for _ in range(k):
            answer.append(resized)  
    return answer
    
# 116.문자열 겹쳐쓰기
def solution(my_string, overwrite_string, s):
    over_len = len(overwrite_string)
    answer = my_string[:s]
    answer += overwrite_string
    answer += my_string[s+over_len:]
    return answer

# 117.대소문자 바꿔서 출력하기
str = input()
answer = ''
for s in str:
    if s.isupper() == True:
        answer += s.lower()
    else:
        answer += s.upper()
print(answer)

# 118.문자열 출력하기
str = input()
print(str)

# 119.전국 대회 선발 고사
def solution(rank, attendance):
    selected = []
    for i, attend in enumerate(attendance):
        if attend:
            selected.append((rank[i], i))

    selected.sort()
    a, b, c = selected[:3]
    return 10000 * a[1] + 100 * b[1] + c[1]

# 120.배열 만들기 2
def solution(l, r):
    answer = []
    
    for i in range(l, r+1):
        if all(num in ['0', '5'] for num in str(i)):
            answer.append(i)
            
    if len(answer) == 0:
        answer.append(-1)
    
    return answer

# 121.코드 처리하기
def solution(code):
    answer = ''
    mode = 0
    for idx, val in enumerate(code):
        if val == "1":
            mode = 0 if mode == 1 else 1
        if mode == 0:
            if idx % 2 == 0 and val != "1":
                answer += val
        else:
            if idx % 2 == 1 and val != "1":
                answer += val    
    return answer if answer!="" else "EMPTY"

# 122.배열 조각하기
def solution(arr, query):
    for i in range(len(query)):
        if i % 2 == 0 :
            arr = arr[:query[i]+1]
        else :
            arr = arr[query[i]:]
    return arr
    
# 123.주사위 게임 3
def solution(a, b, c, d):
    answer = 0
    origin = [a, b, c, d]
    arr = list(set(origin))
    
    if len(arr) == 4:
        answer = min(arr)
    elif len(arr) == 3:
        p = max(origin, key=origin.count)
        tmp = [num for num in arr if num != p]
        answer = tmp[0] * tmp[1]
    elif len(arr) == 2:
        if max([origin.count(num) for num in arr]) > 2:
            p = max(origin, key=origin.count)
            q = min(origin, key=origin.count)
            answer = pow(((10 * p) + q), 2)
        else:
            answer = ((arr[0] + arr[1]) * abs(arr[0] - arr[1]))  
    elif len(arr) == 1:
        answer = int(str(arr[0]) * 4)
    
    return answer
    
# 124.정수를 나선형으로 배치하기
def solution(n):
    array = [[0] * n for _ in range(n)]

    count = 1

    startRow = 0
    endRow = n - 1
    startCol = 0
    endCol = n - 1

    while count <= n * n:
        for i in range(startCol, endCol + 1):
            array[startRow][i] = count
            count += 1
        startRow += 1

        for i in range(startRow, endCol + 1):
            array[i][endCol] = count
            count += 1
        endCol -= 1

        for i in range(endCol, startCol - 1, -1):
            array[endRow][i] = count
            count += 1
        endRow -= 1

        for i in range(endRow, startRow - 1, -1):
            array[i][startCol] = count
            count += 1
        startCol += 1

    return array
profile
21세기 주인공

0개의 댓글