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일까지 있는 해이다..!!

728x90

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

출처 : 프로그래머스

 

코딩테스트 연습 - 두 개 뽑아서 더하기

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

programmers.co.kr

from itertools import combinations
def solution(numbers):
    answer = []
    tmp = list(combinations(numbers,2))
    for t in tmp:
        answer.append(sum(t))
    answer = list(set(answer))
    answer.sort()
    return answer
728x90

문제

두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더한 값이고, f(A)로 표현한다. x보다 작거나 같은 모든 자연수 y의 f(y)값을 더한 값은 g(x)로 표현한다.

자연수 N이 주어졌을 때, g(N)을 구해보자.

입력

첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.

출력

첫째 줄에 g(N)를 출력한다.

코드

import sys

n = int(sys.stdin.readline())
answer = 0
for i in range(1,n+1):
    answer += (n//i) *i
print(answer)

풀이

바로 생각해내기 어려웠다.

 

2의 배수를 생각해보자.

2, 4, 6, 8, ... 당연히 2의 배수니까 모든 배수에 2가 포함되어 있다. 

n이 4라면 4//2 = 2  -> 2가 2번 있다.

n이 8라면 8//2 = 4 -> 2가 4번 있다.

.... 

i 가 n // i 번 있다는 것이다.

그래서  아래와 같이 코드를 작성했다.

answer += (n//i) *i

 

 

출처 : 백준

+ Recent posts