def solution(a, b):
    return sum([a[i]*b[i] for i in range(len(a))])
  • 두 배열은 길이가 같다고 했기 때문에 리스트를 순회할 때, 어떤 리스트의 길이를 사용하든 상관은 없다.(난 a의 길이를 사용했다.)
  • 각 리스트에 대응되는 요소끼리 곱한 후 반환된 리스트의 값들을 sum 함수를 사용해 전부 더한다.

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

 

프로그래머스

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

programmers.co.kr

 

 

 

'코테 > 프로그래머스' 카테고리의 다른 글

약수의 합 - python  (0) 2024.04.16
제일 작은 수 제거하기 - python  (0) 2024.04.16
시저 암호 - python  (0) 2024.04.16
def solution(n):
    sum = 0
    for i in range(1, n+1):
        if n % i == 0:
            sum += i
    return sum

 

  • n을 어떤 수로 나누었을 때, 나머지가 0이라면, 어떤 수는 n의 약수
  • 약수의 조건을 만족하는 수를 sum에 더한 후 반환
def solution(n): 
	return sum([i for i in range(1, n+1) if n % i == 0])

 

  • 짧은 코드들은 리스트 컴프리헨션으로 표현하는 것이 깔끔한 것 같다.
약수의 조건
"나머지가 0일 때"
주어진 수를 다른 수로 나누었을 때, 그 나머지가 0이 되어야 함.

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

 

프로그래머스

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

programmers.co.kr

 

'코테 > 프로그래머스' 카테고리의 다른 글

내적 - python  (0) 2024.04.17
제일 작은 수 제거하기 - python  (0) 2024.04.16
시저 암호 - python  (0) 2024.04.16
def solution(s, n):
    answer = ''
    for i in list(s):
      if i == ' ': answer += ' '
      elif 'a' <= i <= 'z':
        if ord('z') < ord(i) + n:
          answer += chr(ord(i) + n - 26)
        else:
          answer += chr(ord(i)+n)
      else:
        if ord('Z') < ord(i) + n:
          answer += chr(ord(i) + n -26)
        else:
          answer += chr(ord(i) + n)
    return answer
  • 공백일 땐 그대로 공백 처리를 해준다.
  • 알파벳+n을 했을 때, 'z'를 넘어간다면 다시 알파벳의 시작으로 돌아가게 한다.
    • 알파벳은 26개 >> 즉,  -26을 해줌으로써 a로 돌아가도록 설정
    • 아닐 경우 그대로 더한 후 변환

파이썬에서 ord()와 chr() 함수는 문자와 해당 문자의 아스키 코드 값을 변환하는 데 사용

  1. ord() 함수:
    • ord('a')는 문자 'a'의 아스키 코드 값인 97을 반환
  2. chr() 함수:
    • chr(97)은 아스키 코드 값이 97인 문자(a)를 반환 >> 이는 소문자 'a'를 의미

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

 

프로그래머스

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

programmers.co.kr

 

'코테 > 프로그래머스' 카테고리의 다른 글

내적 - python  (0) 2024.04.17
약수의 합 - python  (0) 2024.04.16
제일 작은 수 제거하기 - python  (0) 2024.04.16

Day5

  • 코드 처리하기
  • 등차수열의 특정한 항만 더하기
  • 주사위 게임2
  • 원소들의 곱과 합
  • 이어 붙인 수

코드 처리하기

문제 설명

문자열 code가 주어집니다.code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.mode가 0일 때code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.code[idx]가 "1"이면 mode를 0에서 1로 바꿉니다.mode가 1일 때 code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.code[idx]가 "1"이면 mode를 1에서 0으로 바꿉니다.문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요.단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.

def solution(code):
    mode = False
    ret = ''
    
    for i in range(len(code)):
        if mode == False:
            if code[i]!="1" and i%2==0:
                ret += code[i]
            mode = not mode if code[i] == "1" else mode
        else:
            if code[i]!="1" and i%2==1:
                ret += code[i]
            mode = not mode if code[i] == "1" else mode
    if ret == '':
        ret = "EMPTY"
            
    return ret

아직은 요령이 없어서 문제 설명 곧이 곧대로 해석해서 코드를 짜는 것 같다.

 

1. if문으로 mode > 0,1 구분

2. 0일 때, code[i]가 1이 아니고, 짝수일 때 문자 추가 + code[i]가 1이면 토글

3. 1일 때, code[i]가 1이 아니고, 홀수일 때 문자 추가 + code[i]가 1이면 토글

4. 만들어진 문자열 ret이 빈 문자열이면 EMPTY 반환

def solution(code):
    answer = ''

    mode = 0
    for i in range(len(code)):
        if code[i] == '1':
            mode ^= 1
        else:
            if i % 2 == mode:
                answer += code[i]

    return answer if answer else 'EMPTY'

다른 사람 풀이 : 

1. code 문자열에서 "1"을 만날 때마다 mode를 토글하는 코드 :  mode ^= 1

(문자열이 1이면 추가 안하고 토글만)

2. if i % 2 == mode: > (mode == 0 and i % 2 ==0) or (mode == 1 and i % 2 ==1) 로 해석할 수 있음

> 그래서 mode 0이고 짝수이거나, mode 1이고 홀수일 때, 문자열 추가!

3. 만약 answer가 비어 있다면 "EMPTY"를 반환 

 


등차수열의 특정한 항만 더하기

문제 설명

두 정수 a, d와 길이가 n인 boolean 배열 included가 주어집니다. 첫째항이 a, 공차가 d인 등차수열에서 included[i]가 i + 1항을 의미할 때, 이 등차수열의 1항부터 n항까지 included가 true인 항들만 더한 값을 return 하는 solution 함수를 작성해 주세요.

 

def solution(a, d, included):
    res = 0
    for i in range(len(included)):
        res += (a + i*d) if included[i] == True else 0
        
    return res

다행히?도 등차수열 합공식이 기억이 나서 활용했다.

불린 배열이 True일 때의 항만 더하기


주사위 게임 2

문제 설명

1부터 6까지 숫자가 적힌 주사위가 세 개 있습니다. 세 주사위를 굴렸을 때 나온 숫자를 각각 a, b, c라고 했을 때 얻는 점수는 다음과 같습니다.세 숫자가 모두 다르다면 a + b + c 점을 얻습니다.세 숫자 중 어느 두 숫자는 같고 나머지 다른 숫자는 다르다면 (a + b + c) × (a2 + b2 + c2 )점을 얻습니다.세 숫자가 모두 같다면 (a + b + c) × (a2 + b2 + c2 ) × (a3 + b3 + c3 )점을 얻습니다.세 정수 a, b, c가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
def solution(a, b, c):
    answer = 0
    if a != b and b != c and a != c:
        answer = a + b + c 
    elif a == b == c:
        answer = (a + b + c) * (a**2 + b**2 + c**2) * (a**3 + b**3 + c**3)
    else: answer = (a + b + c) * (a**2 + b**2 + c**2)
        
    return answer

야호

def solution(a, b, c):
    check=len(set([a,b,c]))
    if check==1:
        return 3*a*3*(a**2)*3*(a**3)
    elif check==2:
        return (a+b+c)*(a**2+b**2+c**2)
    else:
        return (a+b+c)

다른 사람 풀이 :

set 클래스는 중복되지 않는 원소들로 구성된 집합(Set)을 나타냄

 

set 클래스를 처음 알았고 요렇게도 활용할 수 있구나

set([a, b, c)] : 주어진 리스트로부터 집합을 생성 > 집합은 중복된 원소를 허용하지 않고, 따라서 중복 값은 하나로 축소됨.

a,b,c 값을 비교하여 생성된 집합의 길이가

1이면 3개의 수가 다 같은 것, 2면 어느 2개의 수가 같은 것, 3이면 3개의 수가 모두 다름.

요렇게 활용해서 값을 추출한다. 


원소들의 곱과 합

문제 설명

문제 설명
정수가 담긴 리스트 num_list가 주어질 때, 모든 원소들의 곱이 모든 원소들의 합의 제곱보다 작으면 1을 크면 0을 return하도록 solution 함수를 완성해주세요.

 

def solution(num_list):
    sum = 0
    cal = 1
    for i in range(len(num_list)):
        sum += num_list[i]
        cal *= num_list[i]
    sum = sum ** 2

    return 1 if cal < sum else 0

 

def solution(num_list):
    s = sum(num_list) ** 2
    m = eval('*'.join([str(n) for n in num_list]))
    return 1 if s > m else 0

다른 사람 풀이:

python 내장함수들을 잘 활용하는 것 같다.

sum 함수로 리스트의 모든 요소를 더하고 제곱함.

eval 함수 : 문자열로 표현된 파이썬 식(expression)을 실행하고 결과를 반환

리스트의 각 요소를 문자열로 변환한 리스트 생성 > 각 요소를 * 로 연결 > eval 함수로 수식 실행


이어 붙인 수

문제 설명

정수가 담긴 리스트 num_list가 주어집니다. num_list의 홀수만 순서대로 이어 붙인 수와 짝수만 순서대로 이어 붙인 수의 합을 return하도록 solution 함수를 완성해주세요.

 

def solution(num_list):
    even = ""
    odd = ""

    for i in num_list:
        if i % 2 == 0:
            even += str(i)
        else:
            odd += str(i)
    return int(even) + int(odd)

if문으로 홀, 짝 구분 후 문자열 이어붙이기

마지막 return 할때 int로 더해서 출력

 

끝 아 졸려


 

+ Recent posts