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

 

프로그래머스

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

programmers.co.kr

에라토스테네스의 체에 대한 지식이 있다면 쉽게 풀리는 문제입니다.

 

우리가 찾아야 하는것은 넓은 범위의 소수입니다. 즉, 천만개의 숫자에 대해 일일히 소수를 판정하지 않고, 소수가 아닌 수를 지워가면 됩니다.

 

2부터 n까지 숫자를 탐색하면서 이전에 나누어지지 않았다면, 즉 소수라면 answer를 1 더해주고 소수의 배수들을 전부 체크해줍니다. (어떤 소수의 배수라면 소수가 아닙니다. 소수는 1과 자신으로만 나누어진다는 명제의 대우입니다.)

 

n까지 모두 순회한다면 우리가 목표로 하는 소수의 갯수를 알 수 있습니다.

 

def solution(n):
    answer = 0
    divided = [False for i in range(n+1)]

    for i in range(2, n + 1):
        if not divided[i]:
            answer += 1
            d = i * 2
            while d <= n:
                divided[d] = True
                d += i

    return answer

 

 

 

728x90

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

 

프로그래머스

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

programmers.co.kr

 

lambda를 이용한 정렬을 할 줄 안다면 정말 쉽게 풀 수 있는 문제입니다.

단어의 n번째 글자를 기준으로 정렬해줍니다. 만약 n번째 글자가 같다면 단어를 기준으로 정렬해 줍니다.

 

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

 

sort(key=lambda x: (x[n], x))

 

정렬의 key를 lambda식으로 표현해 주는데, 우선 순위는 x[n] 즉 어떤 단어 x의 n번째 글자이고 그 값이 같다면 x 즉 어떤 단어 자체를 기준으로 정렬하겠다는 뜻입니다.

 

728x90

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

 

프로그래머스

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

programmers.co.kr

 

문자의 아스키코드 변환을 쓸줄 알면 쉽게 풀 수 있는 문제입니다. (각 알파벳 별로 배열을 하드코딩해도 됩니다.)

 

문자를 아스키코드 값으로 변환해주고, 대 소문자를 구분한 뒤 'a'또는 'A'가 가진 값인 65나 97을 빼줍니다.

그럼 이제 이 알파벳이 몇번째 알파벳인지 알 수 있습니다. 문제에서 주어지는 n값을 더해 뒤로 밀어주고, 혹시 z를 넘어가는 경우를 처리해주기 위해 26으로 나눈 나머지를 취합니다.

 

ex)

Y는 25번째 알파벳입니다. ord('Y') = 89가 나오고 여기서 ord('A')인 65를 빼주면 25번째 알파벳이라는걸 알 수 있는 24가 남습니다. (A가 0입니다.)

N이 3이라면 24 + 3 = 27이 되고, 이 값을 26으로 나눈 나머지는 1입니다.

Y를 3번 뒤로 밀면 Y Z A B = B가 되고 ord('A')에 1을 더한 66을 chr()해줘도 B가 나옵니다.

 

 

def solution(s, n):
    msg = list(s)

    for i in range(len(msg)):
        if msg[i] == " ":
            continue
        else:
            c = ord(msg[i])
            msg[i] = chr(((c + n - 65) % 26) + 65) if c < 97 else chr(((c + n - 97) % 26) + 97)

    return ''.join(msg)
728x90

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

 

프로그래머스

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

programmers.co.kr

 

기본적인 인덱스 관리와 문자열 다루기를 안다면 풀 수 있는 문제입니다.

아이디어는 간단합니다. 단어별 인덱스와 문장의 전체 인덱스를 따로 관리해줍니다.

 

공백을 만난다면 단어가 끝났음을 의미하기 때문에 단어별 인덱스를 0으로 초기화 시켜줍니다.

공백이 아니라면? 홀짝에 따라 upper(), lower()를 사용해서 대소문자를 바꾸면서 단어별 인덱스를 1씩 늘려주면 됩니다.

문장의 인덱스는 모든 과정마다 늘려줍니다.

 

문제에서 짝수번째, 홀수번째의 설명이 좀 애매한데, 우리가 알고 있는 배열의 index처럼 0번째 부터 시작한다고 이해하면 예시케이스와 같이 진행됩니다. 

 

def solution(s):
    msg = list(s)

    idx = 0

    for i in range(len(msg)):
        if msg[i] == " ":
            idx = 0
        elif idx % 2 == 0:
            msg[i] = msg[i].upper()
            idx += 1
        else:
            msg[i] = msg[i].lower()
            idx += 1

    return ''.join(msg)
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/12940

 

프로그래머스

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

programmers.co.kr

 

최대 공약수와 최소 공배수를 구하는 문제입니다.

GCD를 이용해서 최대 공약수는 쉽고 빠르게 구할 수 있습니다.

 

최대 공약수를 구했다면, 최소 공배수는 N * M을 최대 공약수로 나눈 값입니다.

 

예를 들어 N과 M이 24, 36이라면

 

GCD(24, 36)

GCD(36, 24)

GCD(24, 12)

GCD(12, 0) -> 최대 공약수가 12

 

N * M = 864이고 864를 12로 나누면 최소 공배수인 72가 됩니다.

 

def solution(n, m):
    md = gcd(n, m)

    answer = [md, n * m / md]
    return answer


def gcd(a, b):
    if b == 0:
        return a
    return gcd(b, a % b)
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/12969

 

프로그래머스

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

programmers.co.kr

 

백준 사이트 스타일의 입력이 주어지는 문제입니다.

Python의 print에 기본적으로 줄바꿈 \n이 포함된걸 유의해서 2중 for문으로 출력을 찍어주면 됩니다.

 

a, b = map(int, input().strip().split(' '))

for i in range(b):
    line = ''
    for j in range(a):
        line += '*'
    print(line)
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/82612

 

프로그래머스

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

programmers.co.kr

 

간단한 수학 문제입니다.

1에서 N까지를 더하면 그 합은 N (N + 1) / 2가 됩니다. 이를 이용해 전체 요금을 계산하고, 가지고 있는 금액에서 빼 음ㅇ수라면 -1을 곱해준 값을, 0 또는 양의 정수라면 0을 return 하면 됩니다.

 

def solution(price, money, count):
    
    gap = money - ((count * (count + 1)) // 2 ) * price

    return -gap if gap < 0 else 0

 

728x90

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

 

프로그래머스

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

programmers.co.kr

 

행렬의 덧셈을 하는 문제입니다. 

 

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

+ Recent posts