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