728x90

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

출처 : 프로그래머스

 

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

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

programmers.co.kr


def solution(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)

풀이

아스키코드를 활용한 파이썬 함수로 풀이했다.

이 부분은 아직 버벅이니 몇번더 풀어보자.

  • chr() :  아스키코드를 해당하는 문자열로 반환
  • ord() : 문자열에 해당하는 아스키코드 반환
728x90

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

출처 : 프로그래머스

 

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

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

programmers.co.kr


def solution(s):
    answer = ''
    i = 0 #각 단어 인덱스
    for ch in s:
        if ch == ' ': # 빈칸 체크
            answer += ch
            i = 0 # 빈칸이면 계속 단어 인덱스 0
        else: # 빈칸 아니면
            if i%2 == 0:
                answer += ch.upper()
            else:
                answer += ch.lower()
            i+= 1
    return answer
def solution(s):
    answer = ''
    for word in s.split(" "):
        n = ''
        for i in range(len(word)):
            if i%2 == 0:
                n += word[i].upper()
            else:
                n += word[i].lower()
        answer += (n+" ")
    return answer[:-1]

풀이

두 방법으로 풀었는데 비슷하다.

이 문제에서 주의할 점은 단어 사이의 공백이 하나만 있다는 것이 아니라는 점이다.

하나 이상의 공백을 갖고 있다.

그래서 모든 공백을 없애주고 하나의 공백으로만 문자열을 이어 붙이며 새로운 단어일 때 인덱스가 다시 0부터 시작하며 따져줘야 한다.

728x90

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

출처 : 프로그래머스

 

코딩테스트 연습 - 행렬의 덧셈

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요

programmers.co.kr

def solution(arr1, arr2):
    for i in range(len(arr1)):
        for j in range(len(arr1[i])):
            arr1[i][j] += arr2[i][j]
            
    return arr1

풀이 1

배열을 탐색하며 알맞는 인덱스를 더해줬다.

def solution(arr1, arr2):
    answer = [[c+d for c,d in zip(a,b)] for a,b in zip(arr1,arr2)]
    return answer

풀이 2

다른 사람의 풀이다.

zip을 써서 풀이했다..

2차원 배열 쌍이 나온다면 zip을 생각해보는 연습을 해봐야겠다.

728x90

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

 

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

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

programmers.co.kr

def solution(strings, n):
    # 인덱스 n의 문자가 같으면 사전순
    strings = sorted(strings, key = lambda x:(x[n],x))
    return strings

python의 sorted에서 key는 정말 유용하게 쓰이고 있다.

728x90

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

출처 : 프로그래머스

 

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

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

programmers.co.kr

def solution(arr):
    answer = [arr[0]]
    for i in range(len(arr)-1):
        if arr[i] != arr[i+1]:
            answer.append(arr[i+1])
    return answer

풀이 1

배열의 첫 번 째 값을 넣고 

배열의 앞부터 비교한다.

앞과 뒤 숫자가 다를 때만 answer에 추가한다.

def solution(arr):
    answer = []
    for i in arr:
        if answer[-1:] == [i]:
            continue
        answer.append(i)
    return answer

풀이 2

answer에 arr 숫자를 하나씩 넣는다.

answer에 마지막으로 넣은 숫자가 다음에 올 숫자와 같다면 continue

728x90

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

출처 : 프로그래머스

 

코딩테스트 연습 - 최소직사각형

[[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] 120 [[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] 133

programmers.co.kr


def solution(sizes):
    answer = 0
    w = max(max(x) for x in sizes)
    h = max(min(x) for x in sizes)
    answer = w*h
    return answer

 

728x90

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 = ''
    d_31 = [1,3,5,7,8,10,12]
    d_30 = [4,6,9,11]
    d_29 = [2]
    day = ['SUN','MON','TUE','WED','THU','FRI','SAT']
    start = 5
    tmp = 0
    for ai in range(1,a):
        if ai in d_31:
            tmp += 31
        if ai in d_30:
            tmp += 30
        if ai in d_29:
            tmp += 29
    tmp += b
    tmp -= 1
    answer = day[(start + (tmp % 7))%7]
    
    return answer

풀이

말그래도 구현했다...

윤년은 4년마다 돌아오는 2월이 29일까지 있는 해이다..!!

+ Recent posts