[Programmers/Lv. 0] 코딩테스트 입문 Day 24 - 수학, 시뮬레이션, 문자열, 조건문, 반복문 (Python)

2023. 6. 6. 16:42Algorithm

1. 치킨 쿠폰


치킨 한 마리당 쿠폰을 한 장 발급해 주는 치킨집이 있다.
쿠폰을 열장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스로 주는 치킨에도 쿠폰을 발급해 준다.
시켜 먹은 치킨의 수가 주어질 때, 받을 수 있는 최대 서비스 치킨의 수를 구하라는 문제이다.

 

(내가 생각한 풀이 과정)

총 서비스를 받은 치킨의 수를 저장할 정수 변수 answer를 만들어둔다.

이제 10마리를 기준으로 입력값 chicken을 계속 반복시킬 거다.
어떻게 반복할 거냐면.
1) 입력값 chicken을 10으로 나누어서 서비스로 받은 치킨의 값을 answer에 추가한다.
2) chicken에는 10으로 나누고 남은 나머지 값과 + 서비스로 받은 치킨의 값을 저장해 둔다 (서비스로 주는 치킨에도 쿠폰을 발급해 준다고 했음).

위와 같은 식으로 10 미만으로 떨어질 때까지 반복해 주면 된다.
(10 미만으로 떨어졌다는 것은 더 이상 서비스로 받을 수 있는 치킨이 없다는 뜻이기 때문. 서비스 치킨은 쿠폰 10장당 1마리이므로.)

 

(코드)

더보기

💡 내 코드

def solution(chicken):
    answer = 0
    
    while chicken >= 10:
        answer += chicken//10
        chicken = chicken//10+chicken%10
    
    return answer

 

💡 다른 사람의 풀이 코드

조금 어이없긴 하지만, 틀린 부분은 없는 코드이다.

10%의 10%의 10%의 10%.... 서비스 치킨은 이렇게 나가니까.

def solution(chicken):
    return int(chicken*0.11111111111)

 


2. 이진수 더하기


이진수(0과 1로만 이루어져 있음)를 의미하는 두 개의 문자열이 주어질 때, 두 이진수의 합을 구하라는 문제이다.
단, 결괏값도 이진수를 의미하는 문자열로 나타내야 한다.

 

(내가 생각한 풀이 과정)

문제 풀이를 위해 과정을 고민하기보다는 파이썬에서 2진수를 잘 다룰 수 있는지 확인하기 위한 문제이다.

이진수를 다루는 데 익숙지 않다면, 아래의 두 개의 함수를 배워보고 코드를 짜보자.
int(x, radix) : radix 진수로 표현된 문자열 x를 10진수로 변환 후 반환한다. 
bin(number) : 입력받은 number의 값을 이진수 문자열로 돌려주는 함수이다. -> 결괏값이 0b10100... 형태로 나타남

 

(코드)

더보기

💡 내 코드

def solution(bin1, bin2):
    num1, num2 = int(bin1, 2), int(bin2, 2)
    answer = bin(num1 + num2)
    return answer[2:]

 


3. A로 B 만들기


문자열 before의 순서를 바꾸어 문자열 after를 만들 수 있으면 1을, 만들 수 없으면 0을 반환하라는 문제이다.

 

(내가 생각한 풀이 과정)

결국 순서를 바꾸어 같은 문자열을 만들기 위해서는 알파벳이 같아야 한다는 뜻이다.
문자열을 sorted() 함수를 이용해서 모두 정렬시키고, 두 문자열이 같다면 같은 문자열을 만들 수 있다고 볼 수 있다.

 

(코드)

더보기

💡 내 코드

def solution(before, after):
    return 1 if sorted(before) == sorted(after) else 0

 


4. k의 개수


정수 i, j, k가 주어질 때, i부터 j까지 k가 몇 번 등장하는지를 구하라는 문제이다.
(예를 들어, 1부터 13까지의 수에서 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장한다.)

 

(내가 생각한 풀이 과정)

이 문제의 핵심 포인트는 11은 1이 2번 들어간 것으로 파악한다는 것이다.
결국은, 이 정수를 문자열로 바꾸어서 count() 함수를 통해 해당 j 요소가 몇 개 들어가 있는지를 파악하면 되는 것이다.

 

(코드)

더보기

💡 내 코드

def solution(i, j, k):
    answer = 0
    for num in range(i, j+1):
        answer += str(num).count(str(k))
    return answer

 

💡 다른 사람의 풀이 코드

나와 같은 생각. 하지만, 3줄로 정리된 코드.

def solution(i, j, k):
    answer = sum([ str(i).count(str(k)) for i in range(i,j+1)])
    return answer