흔하디 흔한 if-else문을 익히는 문제이다.

다만 이렇게 정리하는 이유는 원래 사용하던 C/C++이었으면 금방 풀었을텐데, 

아직도 2개 이상의 입력받기를 할 때 python으로 처리하는 방법이 계속 햇갈려서이다.

정리겸 한 번 올리기로 한다.

출처: https://www.acmicpc.net/problem/11367


예제 입력에서 "name value"의 형태로 입력받는 부분이 계속 햇갈린다..

그냥 scanf로 받으면 되는 C/C++과는 살짝 다르게 python을 받기 때문이다.

중요한 것은 split()을 사용하고, 각각의 변수에 이를 통해서 저장하도록 만들어야 한다는 점이다.

즉, 다음과 같은 형태가 필요하다.

1
name, score = input().split()
cs

 

결국 내가 만든 정답코드는 다음과 같다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
repeat = int(input())
for i in range(0, repeat):
    name, score = input().split()  # 이 부분이 중요. 2개 이상 입력받기를 계속 햇갈리는 중...2021-7-16
    # print(name, score, sep=' ')
    if int(score) >= 97:
        grade = "A+"
    elif int(score) <= 96 and int(score) >= 90:
        grade = "A"
    elif int(score) <= 89 and int(score) >= 87:
        grade = "B+"
    elif int(score) <= 86 and int(score) >= 80:
        grade = "B"
    elif int(score) <= 79 and int(score) >= 77:
        grade = "C+"
    elif int(score) <= 76 and int(score) >= 70:
        grade = "C"
    elif int(score) <= 69 and int(score) >= 67:
        grade = "D+"
    elif int(score) <= 66 and int(score) >= 60:
        grade = "D"
    else:
        grade = "F"
    print(name, grade, sep=' ')
 
cs

문제는 내가 바보라서 일일이 int(score)를 elif에 넣었다는 것이다.

그냥 간단하게 ....

1
score = int(score)
cs

이렇게 한 다음 elif문에 score만 넣으면 되는 것을....

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
repeat = int(input())
for i in range(0, repeat):
    name, score = input().split()  # 이 부분이 중요. 2개 이상 입력받기를 계속 햇갈리는 중...2021-7-16
    # print(name, score, sep=' ')
    score = int(score)  # 이렇게 하나만 넣으면 score는 int형으로 변환이 된다.
    if score >= 97:
        grade = "A+"
    elif score <= 96 and score >= 90:
        grade = "A"
    elif score <= 89 and score >= 87:
        grade = "B+"
    elif score <= 86 and score >= 80:
        grade = "B"
    elif score <= 79 and score >= 77:
        grade = "C+"
    elif score <= 76 and score >= 70:
        grade = "C"
    elif score <= 69 and score >= 67:
        grade = "D+"
    elif score <= 66 and score >= 60:
        grade = "D"
    else:
        grade = "F"
    print(name, grade, sep=' ')
cs

 

 

출처: https://www.acmicpc.net/problem/11367

 

11367번: Report Card Time

The input will begin with a single line containing just a whole number, n, of the number of hobbits in the class, followed by n lines in the form a b, where a is the hobbit’s name (only alphabetical characters) and b is the hobbit’s grade, given as a w

www.acmicpc.net

 

매우 단순한 수학문제임에도 불구하고 몇 번이고 틀려서 계속 고민하다가 겨우 왜 그런지 알게된 문제라서 이렇게 정리를 해본다.

출처: https://www.acmicpc.net/problem/10093

문제를 보다시피 매우 간단한 문제이다.

다만, 한 가지를 간과한 것이 있어서 계속 틀렸다.

숫자가 예제에서 "8 14" 라고 되어있는데, 잊지 말자... "14 8"도 들어갈 수 있고, "13, 14"도 들어갈 수 있음을...

 

처음에 그래서 매우 간단하게 만든 코드이자 계속 틀렸다고 나온 코드가 다음의 코드이다.

(물론, 위에서 주어진 예제인 "8 14"는 무척이나 잘 돌아간다...)

1
2
3
4
5
num1, num2 = list(map(int, input().split()))
btw_num = num2-num1-1
print(btw_num)
for i in range(num1+1, num2):
    print(i, end=' ')
 

 

그리고 max와 min값을 새로 처리해서 만들어야 한다.

결국 다음과 같은 코드가 정답인 코드이다.

1
2
3
4
5
6
7
8
9
10
a, b = list(map(int, input().split()))
num2 = max(a, b)
num1 = min(a, b)
btw_num = num2-num1-1
if num1 == num2 or num1+1 == num2:
    btw_num = 0
print(btw_num)
for i in range(num1+1, num2):
    print(i, end=' ')
 
cs

 

출처: https://www.acmicpc.net/problem/10093

 

10093번: 숫자

두 양의 정수가 주어졌을 때, 두 수 사이에 있는 정수를 모두 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

파이썬을 최근에 처음부터 배우기 시작하면서 기능을 하나씩 알아가고 있는 중이다.

 

이 문제는 특히 n진수를 10진수의 숫자로 변환을 하는 방법이다.

 

원래 C언어에서라면 일일이 배열로 받고, 그것을 다시 10진수로 처리해야하는 과정이 있었겠지만,

파이썬에서는 input으로 수를 받고, 그것을 int()를 통해서 밑을 n이라는 수로 받음으로써 쉽게 처리할 수 있다.

 

 

출처: https://www.acmicpc.net/problem/11104

 


 

1
2
3
4
5
# 파이썬에서는 binary를 input으로 입력을 받고, 이를 int를 통해서 binary변수의 수를 밑이 2인 것으로 하여 변환이 가능하다.
for i in range(0int(input())):
    binary = input()
    print(int(binary, 2))  # 밑(2가 있는 자리)을 어떤 수로 해서 처리할 것인지 
 
cs

 

[문제]

월드 전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다.

예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1070만 원이 들며, 열 대 생산하는 데는 총 1,700만 원이 든다.

노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총수입(판매비용)이 총비용(=고정비용+가변비용) 보다 많아지게 된다. 최초로 총수입이 총비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다.

A, B, C가 주어졌을 때, 손익분기점을 구하는 프로그램을 작성하시오.


[입력]

첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 21억 이하의 자연수이다.


[출력] 

첫 번째 줄에 손익분기점 즉 최초로 이익이 발생하는 판매량을 출력한다. 손익분기점이 존재하지 않으면 -1을 출력한다.

 

입력예제 출력예제
1000 70 170 11
1000 150 170 501
1000 70 50 -1
1000000000 1000 1001 1000000001

 

 


1. input().split()으로 문자열을 여러 개 받아서 리스트를 형성할 수 있다. 

2. map()을 통해서 int형태로 바꿔줄 수 있다.

즉,

a, b, c = map(int,input().split())

은 a, b, c에 정수를 받아주는데, 무엇을 받느냐면, input의 값들을 차례 데로 받아주세요~라는 뜻이 된다. 

 

따라서, 다음과 같은 코드로 작성할 수 있다.

a, b, c = map(int,input().split())

if b>=c:
    print(-1)
else:
    print(int(a/(c-b))+1)

a/(c-b))+1가 나오게 되는 이유에 관해서는 C언어로 만든 코드를 작성한 곳에서 조금 더 자세히 알 수 있다.


https://gettingtoknowit.tistory.com/11?category=918026

 

[백준 1712번] 손익분기점

[문제] 월드 전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재

gettingtoknowit.tistory.com

 

출처: https://www.acmicpc.net/problem/1712

우선 random함수에 대해서 알아야 한다.

 

random함수를 하기 위해서는 random함수를 import시켜야 한다. 

import random

 

이번에 사용할 random이 형태는 range의 값을 받아와서 random하게 숫자를 출력하는 문장을 사용할 것이다.

random.randrange(시작값, 끝값+1)

이런식으로 시작값~끝값의 숫자를 랜덤으로 뽑아주도록 하는 것이 랜덤함수이다.

random으로 range를 first number ~ last number로 해서 숫자를 뽑는다는 뜻이다.

 

다음에는 if문을 잘 봐야한다.

lotto라는 list에서 .count를 통해 이미 뽑은 숫자들을 확인하면서,

==0을 통해 만약 한 번도 출력이 되지 않았다면,

.append를 함으로써 num값을 lotto라는 list에 추가를 해주는 것이다 (아래와 같이 코드가 작성된다)

if lotto.count(num)
	lotto.append(num)

 

다음으로 6개의 숫자를 뽑기 위해서 len()를 통해 리스트의 길이가 6이 넘어갈 때, 즉 7이 될 때 break를 한다.

if len(lotto) > 6:
        break

 

그리고 마지막으로 추첨된 로또 번호들을 출력해주면 된다!

for i in range(0, 6): 
    print("%d " %lotto[i], end="")

참고로 만약 숫자가 오름차순으로 정렬이 되기를 원한다면 sort()를 사용하는 것도 가능하다.

lotto.sort()

 


 

완성된 코드는 이렇게 된다

파이썬으로 간단한 계산기 만들기 프로그램이다.

일단 나눗셈의 경우 integer(정수) 값만 출력이 되는 것으로 했다.


코드 작성 순서는 다음과 같다

 

1. 전역변수를 설정한다.

2. calc()함수를 만든다.

3. 메인코드를 통해 총 4번 반복을 해서 사칙연산을 한 번씩 출력해볼 수 있도록 한다.

4. 계산연산자(oper)와 숫자 2개(var1, var2)를 받는다.

5. calc함수를 불러와서 계산한다.

6. 출력한다.

 


 

 

+ Recent posts