문제 바로가기

 

10996번: 별 찍기 - 21

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

www.acmicpc.net

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력

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

출력

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


내 소스

N = int(input())
for i in range(N):
  print("* " * (N-N//2)) #홀수만큼 곱하기
  print(" *" * (N//2)) #짝수만큼 곱하기

 

 

처음엔 규칙도 제대로 이해하지 못했다. 왼쪽 그림처럼 5를 입력하면 빨간 별이 출력되고, 6이면 파란 별이 출력되는줄알았다. 그래서 도대체 뭐지,,,했는데 시간을 갖고 다시 풀어봤다. 규칙이 보인다! 세로가 아닌 가로로 쭉- 생기는것이다!!

for문으로 별의 묶음을 N만큼 출력시키고, 홀, 짝 나눠서 *공백 혹은 공백*을 출력시키면 끝!

문제 바로가기

 

2446번: 별 찍기 - 9

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

www.acmicpc.net

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력

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

출력

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


내 소스

# 오답
N = int(input())
line = 2*N-1
for i in range(0, line//2+1):
  star = '*'*(line-i*2)
  print(star.center(line))
for j in range(line//2+2, line+1):
  star2 = '*'*(j*2-line)
  print(star2.center(line))

겉으로는 똑같이 출력되는데, 출력 형식이 잘못됐다는 결과가 떴다. 다른 케이스를 입력해봐도 잘만 출력되는데,,하다가 사람들이 질문올린걸 봤다. 공백에 문제가 있는 것 같았다.

더보기

*********
*******
*****
***
*
***
*****
*******
*********
나의 코드를 출력하면 center를 사용했기때문에 이런 형태인데, 문제는 아래와 같은 출력을 원하는 거였다.

*********
^*******
^^*****
^^^***
^^^^*
^^^***
^^*****
^*******
*********
(^는 공백)

즉, 처음에 나는 양쪽 공백을 모두 제거한 것이고, 문제에서는 오른쪽 공백만 제거하길 원했던 것!

# 정답
N = int(input())
line = 2*N-1
for i in range(0, line//2+1):
  print(' '*i + '*'*(line-i*2))
for j in range(line//2-1, -1, -1):
  print(' '*j + '*'*(line-j*2))

 

☆아 참 그리고 질문글에서 팁하나 배웠다. 예제 출력을 드래그 해보면 공백이 어디에 있고 없는지를 알 수 있다! 이 문제도 드래그해보면 왼쪽에만 있는 것을 알 수 있다.

문제 바로가기

 

2523번: 별 찍기 - 13

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

www.acmicpc.net

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력

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

출력

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


내 소스

N = int(input())
for i in range(1, (2*N)):
  if i <= N:
    print('*'*i)
if i > N:
  for j in range(2*N-1, N, -1):
    print('*'*(j-N))

더보기

이 문제는 좀 애를 먹었다. 처음에는 아래처럼 코드를 작성했더니

N = int(input())
for i in range(1, (2*N)):
if i <= N:
print('*'*i)
if i > N:
print('*'*(i-N))

*
**
***
*
**

이런식으로 4~5번째 줄 출력이 이상하게 나왔다. 그래서 다시 아래처럼 수정을 했다.

N = int(input())
for i in range(1, (2*N)):
if i <= N:
print('*'*i)
if i > N:
for j in range(2*N-1, N, -1):
print('*'*(j-N))

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

근데 또 이번에는 4~5번째 줄이 한번 더 출력되는거다!!! 암튼 if i>N을 처음 for문 밖으로 꺼내서 해결했다...

문제 바로가기

 

10817번: 세 수

첫째 줄에 세 정수 A, B, C가 공백으로 구분되어 주어진다. (1 ≤ A, B, C ≤ 100)

www.acmicpc.net

문제

세 정수 A, B, C가 주어진다. 이때, 두 번째로 큰 정수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 세 정수 A, B, C가 공백으로 구분되어 주어진다. (1 ≤ A, B, C ≤ 100)

출력

두 번째로 큰 정수를 출력한다.


내 소스

number_list = list(map(int, input(). split(" ")))
number_list.sort()
print(number_list[1])

20 30 10 -> 10 20 30

30 30 10 -> 10 30 30 

40 40 40 -> 40 40 40 

20 10 10 -> 10 10 20

이 입력들을 정렬하면 오름차순으로 정렬되는데, 잘 보면 2번째로 온 값이 모두다 2번째로 큰 정수들이다.

문제 바로가기

 

5543번: 상근날드

문제 상근날드에서 가장 잘 팔리는 메뉴는 세트 메뉴이다. 주문할 때, 자신이 원하는 햄버거와 음료를 하나씩 골라, 세트로 구매하면, 가격의 합계에서 50원을 뺀 가격이 세트 메뉴의 가격이 된다. 햄버거는 총 3종류 상덕버거, 중덕버거, 하덕버거가 있고, 음료는 콜라와 사이다 두 종류가 있다. 햄버거와 음료의 가격이 주어졌을 때, 가장 싼 세트 메뉴의 가격을 출력하는 프로그램을 작성하시오. 입력 입력은 총 다섯 줄이다. 첫째 줄에는 상덕버거, 둘째 줄에는

www.acmicpc.net

문제

상근날드에서 가장 잘 팔리는 메뉴는 세트 메뉴이다. 주문할 때, 자신이 원하는 햄버거와 음료를 하나씩 골라, 세트로 구매하면, 가격의 합계에서 50원을 뺀 가격이 세트 메뉴의 가격이 된다.

햄버거는 총 3종류 상덕버거, 중덕버거, 하덕버거가 있고, 음료는 콜라와 사이다 두 종류가 있다.

햄버거와 음료의 가격이 주어졌을 때, 가장 싼 세트 메뉴의 가격을 출력하는 프로그램을 작성하시오.

입력

입력은 총 다섯 줄이다. 첫째 줄에는 상덕버거, 둘째 줄에는 중덕버거, 셋째 줄에는 하덕버거의 가격이 주어진다. 넷째 줄에는 콜라의 가격, 다섯째 줄에는 사이다의 가격이 주어진다. 모든 가격은 100원 이상, 2000원 이하이다.

출력

첫째 줄에 가장 싼 세트 메뉴의 가격을 출력한다.


내 소스

order_list = []
for i in range(5):
    order = int(input())
    order_list.append(order)
hamburger = min(order_list[:3])
drink = min(order_list[-2:])
print(hamburger+drink-50)

for문으로 입력을 5줄 받았다. 그리고 가장 싼 세트 메뉴의 가격을 구하기 위해 가장 싼 햄버거와 음료를 찾아 더했다. 첫째 줄부터 셋째 줄까지는 햄버거, 넷째 줄과 다섯째 줄은 음료이므로 슬라이싱을 이용하여 최솟값을 구했다.

+ Recent posts