Coding Test/PYTHON

[백준] 2439번, 10871번, 1110번 [python3]

JJO.OYA 2022. 6. 1. 03:45

# 문제

2439번 : 별 찍기 - 2

https://www.acmicpc.net/problem/2439

 

2439번: 별 찍기 - 2

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

www.acmicpc.net

 

별 찍기 - 2 성공

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 128 MB 200517 112085 96254 56.408%

문제

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

입력

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력

첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.

예제 입력 1 복사

5

예제 출력 1 복사

    *
   **
  ***
 ****
*****

 


# 풀이

# 2439번 : 별 찍기 - 2

n = int(input())

space = ' '
star = '*'

for i in range(1,n+1):
    print(space*(n-i)+star*i)

1) 공백도 하나의 문자열로 보고 space와 star 지정

 

2) 1부터 n까지 space는 n-1부터 거꾸로, star는 1부터 순서대로

    space 4 star 1

    space 3 star 2

    space 2 star 3

    space 1 star 4

    space 0 star 5

 

 


 

# 문제 

10871번 : x보다 작은 수

https://www.acmicpc.net/problem/10871

 

10871번: X보다 작은 수

첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000) 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.

www.acmicpc.net

X보다 작은 수 성공

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 256 MB 190423 103554 85550 54.619%

문제

정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)

둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.

출력

X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. X보다 작은 수는 적어도 하나 존재한다.

예제 입력 1 복사

10 5
1 10 4 9 2 3 8 5 7 6

예제 출력 1 복사

1 4 2 3

 


# 풀이

# 10871번 : x보다 작은 수   # Again!!

n, x = map(int, input().split())

a = list(map(int, input().split()))

for i in range(n):
    if a[i] < x:
        print(a[i], end=' ')

1) a를 리스트로 받아서 순서대로 돌면서 x보다 작으면 출력

 

>> 리스트로 받아야 하는걸 생각 못함..

>> 리스트 연습하자!

 

 


# 문제

https://www.acmicpc.net/problem/1110

 

1110번: 더하기 사이클

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,

www.acmicpc.net

더하기 사이클 성공

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 128 MB 198901 92330 76035 46.551%

문제

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.

26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.

위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.

N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.

출력

첫째 줄에 N의 사이클 길이를 출력한다.

예제 입력 1 복사

26

예제 출력 1 복사

4

 


# 풀이

# 1110번 : 더하기 사이클  # O

n = int(input())
cnt = 0

result = n

while True:
    cnt+=1
    
    if result<10:
        sum = 0 + result
    else:
        sum=result//10+result%10
    result = (result%10)*10 + sum%10
    
    if result == n:
        print(cnt)
        break

1) n을 result로 놓고

 

2) while문 돌 때마다 count

 

3) result가 10보다 작으면 0과 자기자신을 더해서 sum이라고 지정해주고

    그렇지 않다면 result//10 몫 (10의 자리 수) + result %10 나머지(1의 자리 수) 를 sum으로 넣어줘

 

4) (result %10)*10 (result의 1의 자리수를 십의 자리수) + sum %10 (일의 자리 수)를 result로 업데이트

 

5) result == n이라면 break

 

>> 더 좋은 코드 있을거 같은데..더 짜보기