728x90
반응형

6/ 24 파이썬 공부
1. 백준 16727 ICPC
The Iranian ChamPions Cup (ICPC), the most prestigious football league in Iran, is reaching its end, and people are eagerly waiting for the finals, which happened to be between the two most popular Iranian teams, Persepolis and Esteghlal.

The ICPC finals consist of two matches, with each team competing as the home team in one match. The winning team is determined by aggregate score, the sum of the scores of the two matches. For example, if the scores of the two matches are Persepolis 6–0 Esteghlal in the first match, and Esteghlal 3–1 Persepolis in the second match, then the aggregate score will be Persepolis 7–3 Esteghlal, meaning that Persepolis is the winner. If aggregates are equal, the away goals rule is used to determine the winner, in which case the winner is the team that scored the most goals in the match it played away from home. If the result is still equal, a penalty shootout is required.

Hana, an avid football fan, is trying to figure out various scenarios in which her favorite team wins the finals. To this end, she aims to write a program that gets as input the number of goals in the two matches, and decides which team is the winner if it can be derived from the aggregate scores and the away goals rule, otherwise declares that the match goes to penalty kicks. You are going to help Hana write such a program.

The first line of the input contains two space-separated integers p1 and s1, where p1 and s1 are the number of goals scored by Persepolis and Esteghlal, respectively, in the first match in which Persepolis is the home team. The second line contains two space-separated integers s2 and p2, where s2 and p2 are the number of goals scored by Esteghlal and Persepolis, respectively, in the second match in which Esteghlal is the home team. All input integers are between 0 and 20, inclusively.

In the output, print the name of the winning team, either Persepolis or Esteghlal, if the winner can be determined by the aggregate scores and the away goals rule. Otherwise, print Penalty.

>>>해석
이란에서 가장 인기가 많은 축구 리그인 이란 챔피언스 컵(ICPC)도 끝을 향해 가고, 사람들은 이란에서 가장 유명한 두 팀인 페르세폴리스와 에스테그랄 간의 결승전을 열광적으로 기다리고 있습니다.

ICPC의 결승은 각 팀이 한 경기마다 홈 팀이 되어 총 두 경기로 진행됩니다. 
우승팀은 두 경기에서 넣은 점수를 더한 합계 점수로 정해집니다. 
예를 들어 두 경기의 점수가 첫 경기는 페르세폴리스 6 : 0 에스테그랄, 두번째 경기는 에스테그랄 3 : 1 페르세폴리스라면, 합계 점수는 페르세폴리스 7 : 3 에스테그랄이 되어 페르세폴리스가 우승팀이 됩니다. 
합계 점수가 같다면 원정 다득점 규칙에 따라 우승자가 정해지는데, 이 말은 원정에서 더 많은 골을 넣은 팀이 우승팀이 된다는 뜻입니다.

축구 광팬인 한나는 그녀가 응원하는 팀이 우승하는 다양한 시나리오를 그려 보려 하고 있습니다. 이를 위해 그녀는 두 경기의 결과가 입력될 때, 합계 점수와 원정 다득점 규칙에 따라 우승자를 계산할 수 있는 경우 어느 팀이 우승자인지 판단하고, 그렇지 못할 경우 경기가 승부차기로 이어진다는 것을 알리는 프로그램을 작성하려 합니다. 한나가 이 프로그램을 작성할 수 있도록 도와줍시다.

입력의 첫 줄에는 공백으로 구분된 두 정수 p1, s1이 주어지는데, p1과 s1은 각각 페르세폴리스 홈에서 펼쳐지는 첫 경기에서 페르세폴리스와 에스테그랄이 득점한 골의 수입니다. 둘째 줄에도 공백으로 구분된 두 정수 s2, p2가 주어지는데, s2와 p2는 각각 에스테그랄 홈에서 펼쳐지는 두 번째 경기에서 에스테그랄과 페르세폴리스가 득점한 골의 수입니다. 입력되는 모든 정수는 0과 20을 포함한 그 사이 범위에 들어옵니다.

합계 점수와 원정 다득점 규칙에 따라 우승팀을 정할 수 있다면, 우승팀의 이름인 Persepolis 또는 Esteghlal을 출력합니다. 그렇지 않다면, Penalty를 출력합니다.

>>>코드

a, b = map(int, input().split())
c, d = map(int, input().split())
if a+d > b+c:
    print('Persepolis')
elif a+d < b+c:
    print('Esteghlal')
else:
    if d > b:
        print('Persepolis')
    elif d < b:
        print('Esteghlal')
    else:
        print('Penalty')



2. 백준 20233 Bicycle
After a long time at home during the quarantine, in November you decided to go to work by bicycle! Since you do not have your own bicycle, you have to rent one. The bike rental allows you to choose one of two monthly options:

The monthly fee is a roubles. Every day, the first 30 minutes are free, and every minute above that costs x roubles.
The monthly fee is b roubles. Every day, the first 45 minutes are free, and every minute above that costs y roubles.

There are 21 working days in November, and you spend T minutes commuting to work and back home in total every day. Calculate how many roubles you would spend if you use either one of two monthly options.

The first four lines of the input contain integers a, x, b, and y (0 <= a, x, b, y <= 100), each on a separate line. The last line contains a single integer T (1 <= T <= 1440) --- the total time spent on a bicycle during each day.

The only line of the output should contain two integers --- the amount of money you would spend on the first option and the second option, respectively.

>>>해석
집에서 긴 격리가 끝나고, 당신은 11월에 자전거로 출근을 하기로 다짐했습니다! 
당신은 자전거가 없으므로, 하나를 빌려야 합니다. 
자전거 대여 서비스는 한 달 기준 두 가지 옵션을 제공합니다:

- 월 요금은 a 루블입니다. 매일 첫 30분은 무료지만, 그 이후부터는 1분마다 x 루블이 부과됩니다.
- 월 요금은 b 루블입니다. 매일 첫 45분은 무료지만, 그 이후부터는 1분마다 y 루블이 부과됩니다. 

11월에 일하는 날은 총 21일이고, 출퇴근에는 매일 총 T분이 걸립니다. 
각 월 옵션을 이용할 경우 얼마만큼 루블을 내야 하는지 구합시다.

첫 네 줄에 각 줄마다 정수 a, x, b, y (0 <= a, x, b, y <= 100)가 주어집니다. 
마지막 줄에는 매일 자전거에서 소비한 시간을 나타내는 T (1 <= T <= 1440)가 주어집니다.

딱 한 줄에 두 개의 정수를 출력합니다.
각각 첫 번째 옵션, 두 번째 옵션을 선택했을 때 지불해야 하는 금액의 양입니다. 

>>>코드

a = int(input())
x = int(input())
b = int(input())
y = int(input())
n = int(input())
if n <= 30:
    r1 = a
else:
    r1 = a + (n-30)*x*21
if n <= 45:
    r2 = b
else:
    r2 = b + (n-45)*y*21
print(r1, r2)



3. 백준 13623 Zero or One
Everyone probably knows the game Zero or One (in some regions in Brazil also known as Two or One), used to determine a winner among three or more players. For those unfamiliar, the game works as follows. Each player chooses a value between zero or one; prompted by a command (usually one of the contestants announces “Zero or... One!”), all participants show the value chosen using a hand: if the value chosen is one, the contestant shows a hand with an extended index finger; if the value chosen is zero, the contestant shows a hand with all fingers closed. The winner is the one who has chosen a value different from all others. If there is no player with a value different from all others (e.g. all players choose zero, or some players choose zero and some players choose one), there is no winner.

Alice, Bob and Clara are great friends and play Zerinho all the time: to determine who will buy popcorn during the movie session, who will enter the swimming pool first, etc.. They play so much that they decided make a plugin to play Zerinho on Facebook. But since the don’t know how to program computers, they divided the tasks among friends who do know, including you.

Given the three values chosen by Alice, Bob and Clara, each value zero or one, write a program that determines if there is a winner, and in that case determines who is the winner.

The input contains a single line, with three integers A, B and C ,indicating respectively the values chosen by Alice, Beto and Clara.
Restrictions
A, B, C ∈ {0, 1}

Your program must output a single line, containing a single character. If Alice is the winner the character must be ‘A’, if Beto is the winner the character must be ‘B’, if Clara is the winner the character must be ‘C’, and if there is no winner the character must be ‘*’ (asterisc).

>>>해석
다들 셋 이상의 참가자 중 승자를 결정하는 0 또는 1 게임에 대해서는 아실 겁니다. 
(브라질의 몇몇 지역에서는 2 또는 1로 알려져 있기도 합니다.) 
모르시는 분들을 위해, 게임은 아래와 같이 진행됩니다. 
각 참가자는 명령에 맞춰 0 또는 1 중 하나의 값을 고릅니다 (보통 한 명이 "0 또는... 1!"을 외칩니다.); 
모든 참가자는 자신이 고른 값을 손을 이용해 나타냅니다: 
만약 1을 골랐으면 참가자는 검지를 펼친 손을 내보이고, 0을 골랐다면 모든 손가락을 쥔 채 손을 내보입니다. 
다른 모든 사람과 다른 값을 낸 한 명이 승자입니다. 
만약 다른 모든 사람과 다른 값을 낸 참가자가 없다면 (예를 들어 모두 0을 골랐거나, 누구는 0을 고르고 누구는 1을 골랐을 경우) 승자는 없습니다.

친한 친구인 앨리스, 밥, 클라라는 항상 0 또는 1 게임을 합니다: 누가 영화 때 볼 팝콘을 살지, 누가 수영장에 먼저 들어갈지 별별 것을 다 가지고 말이죠. 게임을 너무 많이 한 나머지, 그들은 페이스북에 0 또는 1 게임을 할 수 있는 프로그램을 만들기로 했습니다. 하지만 어떻게 프로그램을 짤지 몰라, 당신을 포함해 알고 있는 친구들과 역할을 분담했습니다. 

0 또는 1 중 앨리스, 밥, 클라라가 고른 세 개의 값이 주어질 때 승자가 있는지 없는지, 있다면 누가 승자인지 판단하는 프로그램을 작성합시다.

각각 앨리스, 밥, 클라라가 고른 값을 나타내는 세 정수 A, B, C가 한 줄에 입력됩니다.
제한
- A, B, C ∈ {0, 1}

한 줄에 문자 하나를 출력합니다. 앨리스가 승자일 경우 'A', 밥이 승자일 경우 'B', 클라라가 승자일 경우 'C', 승자가 없을 경우 '*' (별표)를 출력합니다.

>>>코드

l = list(map(int, input().split()))
if l[1] == l[2] and l[2] != l[0]:
    print('A')
elif l[2] == l[0] and l[0] != l[1]:
    print('B')
elif l[0] == l[1] and l[1] != l[2]:
    print('C')
else:
    print('*')
728x90
반응형
728x90
반응형

6/ 23 파이썬 공부
1. 백준 5358 Football Team
The PLU football coach must submit to the NCAA officials the names of all players that will be competing in NCAA Division II championship game. Unfortunately his computer keyboard malfunctioned and interchanged the letters ‘i’ and ‘e’. Your job is to write a program that will read all the names and print the names with the correct spelling.

The file contains a list of names, and each name will be on a separate line.
Print the same list of names with every ‘i’ replaced with an ‘e’, every ‘e’ replaced with an ‘i’, every ‘I’ replaced with an ‘E’, and every ‘E’ replaced with an ‘I’.

>>>해석
PLU 풋볼 코치는 NCAA 디비전 II 챔피언십 경기에 출전할 모든 선수의 이름을 NCAA 관계자에게 제출해야 합니다. 불행하게도 그의 컴퓨터 키보드는 오작동을 일으켜 'i'와 'e'라는 글자를 바꿨습니다. 당신의 임무는 모든 이름을 읽고 올바른 철자로 이름을 인쇄하는 프로그램을 작성하는 것입니다.

파일에는 이름 목록이 포함되어 있으며 각 이름은 별도의 줄에 있습니다.
모든 'i'가 'e'로, 모든 'e'가 'i'로, 모든 'I'가 'E'로, 모든 'E'가 'I'로 바뀌는 동일한 이름 목록을 인쇄합니다.

>>>코드

while True:
    try:
        n = input()
        table = str.maketrans('eiEI', 'ieIE')
        print(n.translate(table))
    except:
        break




1) 문자열 변환하기 1. replace
사용법
문자열. replace('바꿀 문자', '새로운 문자')

ex)
n = 'Hello World'
n = n.replace('World', 'Brother')  # 무조건 새로 저장해야된다.
print(n)
>>> Hello Brother

그러나 이것의 경우에는 한번에 여러가지 문자를 치환할 수 없다. 따라서 문제에서 원하는 바를 수행하지 못한다. (e를 i로 바꾼후 바뀐 문자열에서 i를 e로 바꾸는 것이기 때문에 모든게 e로 바뀜)

2) 문자열 변환하기 2. translate
사용법
- 문자열 변환 테이블 만들기: table = str.maketrans('바꿀 문자', '새로운 문자')
- 문자열 변환하기: 문자열.translate(table)

ex)
n = 'apple'
table = str.maketrans('aeiou', '12345')
n.translate(table)
print(n)
>>> 1ppl2

2. 백준 11257 IT Passport Examination
การสอบวัดความรู้ระดับพื นฐานด้าน IT หรือ IP (IT Passport Examination) มีข้อสอบ 100 ข้อ ข้อละ 1 คะแนน คิดเป็น 100% ขอบเขตเนื อหามี 3 หมวดได้แก่

Strategy (กลยุทธ์) 35%
Management (การจัดการ IT) 25%
Technology (เทคโนโลยี) 40%
เกณฑ์การสอบผ่าน ผู้เข้าสอบต้องได้คะแนนรวมไม่ตํากว่า 55% และ ต้องได้คะแนนในแต่ละหมวดไม่ตํLากว่า 30% ของคะแนนในหมวดนั น

จงเขียนโปรแกรมประเมินผลการสอบนี
บรรทัดแรก เป็นจํานวนเต็ม N ระบุจํานวนผู้สอบ และ N บรรทัด ต่อมาเป็นข้อมูลของผู้เข้าสอบแต่ละคน ข้อมูลผู้เข้าสอบแต่ละบรรทัดประกอบด้วย หมายเลขผู้สอบ(ตัวเลข 8 หลัก) แล้วตามด้วยจํานวนเต็ม 3 ค่า ซึLงเป็น คะแนนสอบในหมวดทีL 1, 2 และ 3 ตามลําดับ
แต่ละบรรทัดให้พิมพ์หมายเลขผู้เข้าสอบและ ตามด้วยคะแนนรวม และผลการสอบ (PASS หรือ FAIL) ดัง รูปแบบในตัวอย่าง (ตามลําดับจากอินพุต) 

(세상에 이게 뭐람)

>>>해석
IT 능력 시험(IT Passport Examination)은 100개의 문제가 각각 1점으로, 총점은 100점입니다. 
시험에는 세 개의 분야가 있습니다. 

- 전략 분야 35점

- 경영 (IT 경영) 분야 25점

- 기술 분야 40점

시험을 통과하기 위해 총점은 55점 이상이어야 하며, 각 분야마다 30% 이상을 맞아야 합니다. 
시험을 평가하는 프로그램을 작성합시다.
첫 줄에 응시자의 수를 나타내는 정수 N이 주어지고, 이후 N개의 줄에 각 응시자의 정보를 나타내는 정보가 주어집니다. 응시자의 정보를 나타내는 각 줄에는 (8자리인) 응시자 번호와 각각 전략 분야, 경영 분야, 기술 분야의 점수를 나타내는 세 정수가 주어집니다.
각 줄에 응시자의 번호와 총점, 시험 결과(PASS 또는 FAIL)를 (입력에 주어진 순서대로) 예시와 같이 출력합니다. 

>>>코드

for _ in range(int(input())):
    l = list(map(int, input().split()))
    score = l[1] + l[2] + l[3]
    if score >= 55 and l[1] >= 35 * 0.3 and l[2] >= 25 * 0.3 and l[3] >= 40 * 0.3:
        print(l[0], score, 'PASS')
    else:
        print(l[0], score, 'FAIL')



3. 백준 16017 Telemarketer or not?
Here at the Concerned Citizens of Commerce (CCC), we have noted that telemarketers like to use seven-digit phone numbers where the last four digits have three properties. Looking just at the last four digits, these properties are:

- the first of these four digits is an 8 or 9;
- the last digit is an 8 or 9;
- the second and third digits are the same.

For example, if the last four digits of the telephone number are 8229, 8338, or 9008, these are telemarketer numbers.

Write a program to decide if a telephone number is a telemarketer number or not, based on the last four digits. If the number is not a telemarketer number, we should answer the phone, and otherwise, we should ignore it.
The input will be 4 lines where each line contains exactly one digit in the range from 0 to 9. Output either ignore if the number matches the pattern for a telemarketer number; otherwise, output answer.

>>>해석
상업 행위를 염려하는 시민 단체(CCC)는 마지막 네 자리에 세 가지의 특성이 있는 일곱 자리 전화번호가 스팸 전화에 이용됨을 발견했습니다. 마지막 네 자리의 특성은 아래와 같습니다:

- 네 자리 중 첫 번째 자리가 8 또는 9
- 마지막 자리 또한 8 또는 9
- 두 번째 자리와 세 번째 자리는 같음.

예를 들어, 전화번호 마지막 네 자리가 8229, 8338, 9008이라면 이 번호는 스팸 번호입니다.
마지막 네 자리를 이용해 핸드폰 번호가 스팸 번호인지 아닌지 판단하는 프로그램을 작성합시다. 
번호가 스팸 번호가 아니라면 전화를 받고, 그렇지 않다면 무시하면 됩니다.
각 줄에 0부터 9까지 자릿수 하나가 들어오는 네 줄 입력이 주어집니다.
번호가 스팸 번호 패턴과 일치한다면 ignore을, 그렇지 않으면 answer을 출력합니다.

>>>코드

l = []
for _ in range(4):
    l.append(int(input()))
if (l[0] == 8 or l[0] == 9) and l[1] == l[2] and (l[3] == 8 or l[3] == 9):
    print('ignore')
else:
    print('answer')
728x90
반응형
728x90
반응형

6/ 22 파이썬 공부
1. 백준 5355 화성 수학
겨울 방학에 달에 다녀온 상근이는 여름 방학 때는 화성에 갔다 올 예정이다. 
(3996번) 화성에서는 지구와는 조금 다른 연산자 @, %, #을 사용한다. 
@는 3을 곱하고, %는 5를 더하며, #는 7을 빼는 연산자이다. 
따라서, 화성에서는 수학 식의 가장 앞에 수가 하나 있고, 그 다음에는 연산자가 있다.
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 다음 줄에는 화성 수학식이 한 줄에 하나씩 주어진다. 
입력으로 주어지는 수는 정수이거나 소수 첫째 자리까지 주어지며, 0 이상 100 이하이다. 
연산자는 최대 3개 주어진다.
각 테스트 케이스에 대해서, 화성 수학식의 결과를 계산한 다음에, 소수점 둘째 자리까지 출력한다.

>>>코드

for _ in range(int(input())):
    n = list(input().split())
    r = float(n[0])
    for i in range(1, len(n)):
        if n[i] == '@':
            r = r*3
        elif n[i] == '%':
            r += 5
        elif n[i] == '#':
            r -= 7
    print('%.2f' %(r))



2. 백준 13235 팰린드롬
팰린드롬은 앞에서부터 읽을 때와 뒤에서부터 읽을 때가 똑같은 단어를 의미한다. 
예를 들어, eve, eevee는 팰린드롬이고, eeve는 팰린드롬이 아니다. 
단어가 주어졌을 때, 팰린드롬인지 아닌지 판단해보자.
길이가 20보다 작거나 같은 단어가 주어진다. 단어는 알파벳 소문자로 이루어져 있다.
입력으로 주어진 단어가 팰린드롬이면 "true", 아니면 "false"를 출력한다.

>>>코드

s = input()
if s == s[::-1]:
    print('true')
else:
    print('false')


3. 백준 10174 팰린드롬
팰린드롬은 앞으로 읽으나 뒤로 읽으나 똑같은 단어나 숫자들을 말한다. 
일반적으로 대소문자를 구분하지 않지만, 공백은 구분한다.
다음은 팰린드롬의 예시이다.

- Anna
- Harrah
- Arora
- Nat tan
- 9998999
- 123 321
- $$$&&$$$


모든 라인에 대해 팰린드롬인지 아닌지를 구분하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 개수 n이 주어진다.
각 테스트 케이스는 한 줄의 텍스트로 이루어져있으며, 최대 18글자로 이루어져 있다. 비어있는 줄은 없다.
각 테스트 케이스에 대해 정답을 출력한다.
팰린드롬일 경우 "Yes"를 출력하고, 그렇지 않을 경우 "No"를 출력한다.

>>>코드

for _ in range(int(input())):
    s = input().lower()
    if s == s[::-1]:
        print('Yes')
    else:
        print('No')


위의 문제에서 반복과, 대소문자 구별 없음을 추가한 문제이다.

728x90
반응형
728x90
반응형

6/ 21 파이썬 공부
1. 백준 23813 회전
정수 N이 주어질 때, N의 일의 자리 숫자를 떼서 제일 앞자리 왼쪽에 이어 붙힌 것을 N의 회전이라고 정의하자. 
예를 들어, 12345의 회전은 51234가 된다. 3의 회전은 3이 된다. 
이렇게 회전을 계속하다 보면 원래 N으로 돌아오게 된다. 
원래 N으로 돌아올 때까지의 N을 회전하여 나온 수를 모두 더한 값을 출력하시오.
모든 자리의 숫자가 다른 정수 N이 주어진다. 각 자리의 숫자는 1이상이고, 1 <= N <= 987,654,321이다.
N의 회전 결과들을 모두 더한 값을 출력한다. 
단, 결과값을 32비트 정수형으로 처리할 수 없을 수 있음에 유의하라.

 

>>>코드

result = 0
n = input()
for i in range(len(n)):
    result += int(n)
    n = n[-1] + n[:len(n)-1]
print(result)



문자열은 그냥 +가 된다는 사실!

2. 백준 3062 수 뒤집기
수 124를 뒤집으면 421이 되고 이 두 수를 합하면 545가 된다. 
124와 같이 원래 수와 뒤집은 수를 합한 수가 좌우 대칭이 되는지 테스트 하는 프로그램을 작성하시오.
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 
각 테스트 케이스는 한 줄에 하나의 정수 N(10 ≤ N ≤ 100000)이 주어진다.
각 테스트 케이스에 대해서 원래 수와 뒤집은 수를 합한 수가 좌우 대칭이 되면 YES를 아니면 NO를 한 줄에 하나씩 출력한다.

>>>코드

for _ in range(int(input())):
    n = input()
    r = str(int(n) + int(n[::-1]))
    if r == r[::-1]:
        print('YES')
    else:
        print('NO')


3. 백준 2954 창영이의 일기장
창영이는 매일 밤 하루동안 일어난 일을 일기장에 남긴다. 
일기장을 쓰면서 영어 공부도 같이 하기 위해서 영어로 일기를 쓴다. 
또, 남들이 자신의 일기장을 보는 것을 막기 위해서 모음('a','e','i','o','u')의 다음에 'p'를 하나 쓰고,  
그 모음을 하나 더 쓴다.

예를 들어, "kemija" 는 "kepemipijapa"가 되고, "paprika"는 "papapripikapa"가 된다.

창영이가 일기장에 작성한 문장이 하나 주어졌을 때, 원래 문장은 무엇인지 구하는 프로그램을 작성하시오.
첫째 줄에 알파벳 소문자와 공백으로만 이루어진 문장이 하나 주어진다. 
모든 단어는 공백 하나로 구분되어져 있다. 문장의 길이는 최대 100이다.
첫째 줄에 창영이가 일기장에 작성한 문장을 원래 문장으로 바꾸어 출력한다.

>>>코드

vowel = ['a', 'e', 'i', 'o', 'u']
s = input()
i = 0
while i < len(s):
    if s[i] in vowel:
        print(s[i], end = '')
        i += 3
    else:
        print(s[i], end = '')
        i += 1

 

그냥 문자열에서 제거시 for in range() 문을 사용하면 index error가 발생하기 때문에 while 문을 사용해준다.

728x90
반응형
728x90
반응형

5/ 27 파이썬 공부
1. 백준 14920 3n+1 수열
다음의 점화식에 의해 정해지는 수열 C(n)을 생각하자:

     C(n+1) = C(n)/2     (C(n)이 짝수일 때)
            = 3*C(n)+1   (C(n)이 홀수일 때)

초항 C(1)이 자연수로 주어지면, 이 점화식은 자연수로 이루어지는 수열을 정한다.  
예를 들어, C(1)=26이면, 다음의 수열이 된다.

26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1, 4, 2, 1, ...

이 경우, 수열의 뒷부분은 4, 2, 1 이 끝없이 반복된다. 
실제로 C(1)이 5×260보다 작은 자연수인 모든 수열은 언젠가는 4, 2, 1로 끝나게 된다는 것이 알려져 있다.
주어진 입력 C(1)에 대하여 C(n)이 처음으로 1이 되는 n을 출력하시오.
입력: C(1); 1 ≤ C(1) ≤ 100000
출력: C(n)이 처음으로 1이 되는 n

>>>코드

c = int(input())
i = 1
while True:
    if c == 1:
        break
    if c%2 == 1:
        c = 3*c + 1
    else:
        c = c//2
    i += 1
print(i)



2. 백준 15780 멀티탭 충분하니?
오늘은 NAVER D2 캠퍼스에서 CTP 스터디 하는날!!! 스터디 장소가 인하대학교 강의실에서 NAVER D2 캠퍼스로 바뀌었기 때문에 멀티탭 부장 준호는 스터디 전에 미리 멀티탭을 셋팅 해야 한다. 
CTP는 모든 사람이 사용할만큼 충분한 멀티탭을 가지고 있다. 종류는 3구부터 8구까지 다양하게 있다. 
모든 사람들은 노트북만 가져오기 때문에 멀티탭 1구를 무조건 사용한다. 1구를 초과해선 안 된다.
CTP에는 멀티탭에 2개이상 연속으로 코드를 꽂으면 안되는 특별한 규칙이 있다. 
준호는 미리 계산을 해서 모두가 코드를 꽂을 수 있게 멀티탭을 K개 챙겨 갔다. 
하지만 준호는 수학과에서 수학을 못해 전과했기 때문에 가끔 멀티탭을 적게 가지고 올 때가 있다. 
수학을 더 잘하는 여러분이 멀티탭을 충분히 챙겨왔는지 준호에게 알려주자
최초 전기 공급원(벽면 콘센트)는 총 K개이고, 각각의 멀티탭은 개별적으로 전기를 공급받는다. 
즉, 멀티탭을 다른 멀티탭에 이어서 연결하는 경우는 없다.
입력의 첫째 줄에 스터디에 온 학생의 수 N(1 ≤ N ≤ 100)명 멀티탭의 수 K(1 ≤ K ≤ 100)가 주어진다. 
이후 두 번째 줄에 각 멀티탭 구의 수 A[i](3 ≤ A[i] ≤ 8) 가 주어진다. 
모든 사람이 멀티탭에 코드를 꽂을 수 있는경우 “YES” 아니라면 “NO”를 출력한다.

>>>코드

n, k = map(int, input().split())
mt = list(map(int, input().split()))
r = 0
for i in range(k):
    if mt[i]%2 ==1:
        r += (mt[i]//2 +1)
    else:
        r += mt[i]//2
if r>=n:
    print('YES')
else:
    print('NO')



3. 백준 27294 몇개고?
고려대학교 로봇융합관에서 MatKor Cup을 준비하던 주영이는 같이 초밥을 먹자는 동우의 말에 호랭이 초밥 집에 갔다. 모듬 초밥을 먹으면서 동우와 주영이는 다음과 같은 대화를 하였다.

동우: "몇개고?"
주영: "응?"
동우: "밥알말이다. 몇개고?"
주영: "그건 또 뭔데?"
동우: "삼백 이십개다. 훈련된 초밥 장인이 이 한번 스시를 쥘 때 보통은 이 밥알이 삼백 이십개라. 점심 식사에는 삼백 이십개가 적당하다 캐도, 오늘 같은 날이나 술하고 같이 낼 때는 이백 팔십개만 해라, 어이? 배 안부르구로"
주영: "어디서 또 이상한거 배워왔냐"
동우: "너 혹시 재벌집 막내아들 뭔지 모르나?"
주영: "모른다"

대한민국을 뒤흔든 드라마를 모른다는 주영이의 말에 동우는 적잖은 충격을 받았다. 
사태의 심각성을 느낀 동우는 주영이가 '재벌집 막내아들'을 보게 하기 위해 MatKor 사람들을 모았다. 
주영이에게 그냥 영상을 보여주는 것보다 알고리즘을 이용해서 알려주어야 흥미를 가지게 할 수 있다고 생각한 MatKor 사람들은 주영이가 드라마에 흥미를 가지게 하기 초밥 밥알 갯수로 문제를 만들기로 했다. 
자 MatKor에서 문제를 만들었고, 동우가 주영이에게 문제를 말했다.

동우: "오늘 나는 너가 만든 초밥을 먹을 거야. 너는 '재벌집 막내아들'의 진양철 회장님의 말에 따라 술하고 같이 초밥을 먹거나 점심 식사가 아닐 때는 초밥의 밥알을 280개로 하며, 점심 식사이면서 술과 같이 먹지 않을때는 초밥의 밥알을 320개로 하여 초밥을 만들어야 해, 근데, 내가 초밥을 언제 먹을지, 혹은 술과 같이 먹을지 아직 정하지 않았어. 내가 초밥을 먹는 시간과 술의 유무를 말하면, 그때 너는 너가 만들어야 하는 초밥의 밥알 갯수를 구해야해"
당신은 위의 문제를 읽고 주영이를 대신하여 동우의 문제를 해결하여라.

첫 번째 줄에 시간을 의미하는 정수 T (0 <= T <= 23)와 술의 유무를 의미하는 정수 S (0 <= S <= 1)가 공백으로 구분되어 주어진다. 
T가 11이하이면 아침 시간, 12이상 16 이하이면 점심 시간, 그렇지 않으면 저녁 시간을 뜻한다. 
S가 1 이면 술과 함께 먹는 것을 의미하며, 0 이면 술 없이 초밥을 먹는 것을 의미한다.
첫 번째 줄에 주영이가 만들어야 하는 초밥 하나의 밥알의 갯수를 출력하여라.

>>>코드

t, s = map(int, input().split())
if t<= 11 or t>16 or s ==1:
    print(280)
else:
    print(320)



4. 백준 28113 정보섬의 대중교통
숭실대학교 정보과학관은 숭실대입구역으로부터 멀리 떨어져 있는 대신, 바로 앞에 숭실대별관앞이라는 명칭의 버스 정류소가 자리 잡고 있다.
학부 연구생 찬솔이는 야근을 마치고 대중교통을 이용해 집에 가려고 한다. 다행히 아슬아슬하게 막차가 끊기지 않은 상황인데, 구체적으로 A분 뒤에 숭실대별관앞 정류소에 집으로 가는 마지막 버스가 도착하고, B분 뒤에 숭실대입구역에 집으로 가는 마지막 열차가 도착한다.
찬솔이는 지금 버스 정류소에 서 있다. 그런데, 찬솔이는 지하철 역까지 걸어가서 지하철을 타는 것이 여기서 버스를 타는 것 보다 빠를 수도 있다는 사실을 알아차려 버렸다. 숭실대입구역의 지하철 승강장까지 걸어가는데는 N분이 걸린다. 버스와 지하철 중 더 먼저 탈 수 있는 것이 무엇인지 알려줘서 야근한 찬솔이의 피로를 회복시켜 주자.

단, 버스와 지하철이 도착한 뒤 탑승하는 데 걸리는 시간은 신경 쓰지 않고, 버스와 지하철 모두 도착한 직후에 승객을 태운 뒤 기다리지 않고 바로 떠난다. 또한 지하철 역에 도착하는 시간과 지하철 열차가 도착하는 시간이 정확히 같다면 지하철을 탈 수 있다.
첫째 줄에 N,A,B가 공백으로 구분되어 주어진다.
버스에 더 먼저 탑승할 수 있으면 Bus, 지하철에 더 먼저 탑승할 수 있으면 Subway, 버스와 지하철에 탑승하게 되는 시간이 동일하면 Anything을 출력한다.

>>>코드

n, a, b = map(int, input().split())
if b>=n and b<a:
    print('Subway')
elif b>=n and b == a:
    print('Anything')
else:
    print('Bus')



5. 백준 28074 모비스
현대 모비스의 MOBIS는 어떤 뜻을 가지고 있을까?
MOBIS는 기존에는 Mobile + System의 합성어에서 시작되었지만, 현재는 "Mobility Beyond Integrated Solution" 라는 의미로 재정의 되었다.
이는 사용자의 경험을 혁신하고, 고객의 요구에 최적화된 통합 솔루션, 그 이상의 가치를 전달하는 모빌리티 플랫폼 프로바이더로 도약하겠다는 뜻을 가지고 있다.
이 뜻에 매료된 진익이는 스티커 용지에 인쇄되어 있는 문자들 중 'M', 'O', 'B', 'I', 'S' 만을 오리고 적절히 배치하여 노트북에 MOBIS를 붙여놓고자 한다.
스티커 용지에 인쇄되어 있는 문자열이 주어진다. 이 문자들을 이용해 MOBIS를 만들 수 있을까?
첫째 줄에 문자열이 주어진다.
주어진 문자열에 포함된 알파벳 대문자들을 이용해 MOBIS를 만들 수 있으면 "YES", 그렇지 않으면 "NO"를 출력한다.

>>>코드

s = input()
if 'M' in s and 'O' in s and 'B' in s and 'I' in s and 'S' in s:
    print('YES')
else:
    print('NO')


6. 백준 28097 모범생 포닉스
모두가 알다시피, 포닉스는 포스텍을 대표하는 모범생이다! 
포닉스는 최고의 모범생답게 남들과는 다른 공부 계획표를 가지고 있다.
포닉스는 총 N개의 공부 계획을 가지고 있다. 
i번째 공부 계획을 실행하는 데에는 T_i시간이 소모된다. 
포닉스는 각 계획을 순서대로 시행하며, 각 계획 사이에는 8시간만큼의 휴식을 취한다.
N개의 공부 계획을 모두 마친 포닉스는 지금의 시간이 첫 번째 공부 계획을 시작한 시간으로부터 얼마나 지났는지 궁금해졌다. 포닉스가 마지막 공부를 마칠 때까지 걸린 총 시간이 며칠 몇 시간인지 구해 보자. 
1일은 24시간이다.
첫 번째 줄에 공부 계획의 수 N이 주어진다. (1<= N<= 120)
두 번째 줄에 각 계획의 공부 시간을 나타내는 N개의 정수 T_1,T_2,... ,T_N이 공백으로 구분되어 주어진다. 
(10 <= T_i <= 30)
모든 계획을 마친 후의 소요 시간을 일과 시간 단위로 공백으로 구분하여 출력한다.

>>>코드

n = int(input())
study = list(map(int, input().split()))
t = (n-1)*8 + sum(study)
print('%d %d' %(t//24, t%24))



7. 백준 1978 소수 찾기
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 
다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
주어진 수들 중 소수의 개수를 출력한다.

>>>코드

n = int(input())
m = list(map(int, input().split()))
r = 0
for i in range(n):
    if m[i] == 1:
        r += 1
    for j in range(2,m[i]):
        if m[i]%j == 0:
            r += 1
            break
print(n-r)



8. 백준 2581 소수
자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.
예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다.
입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.
M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다.
M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 
단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

>>>코드

m = int(input())
n = int(input())
N = []
for i in range(m, n+1):
    for j in range(2, i+1):
        if i%j == 0 and j != i:
            break
        if i%j == 0 and j == i:
            N.append(i)
if len(N) == 0:
    print(-1)
else:
    print(sum(N))
    print(min(N))


9. 백준 2292 벌집
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.

>>>코드

n = int(input())
m, i = 1, 0
while True:
    if n<= m:
        break
    i += 1
    m += 6*i
print(i+1)



6의 배수로 증가된다 (+6, +12, +18, +24, ...)

10. 백준 28062 준석이의 사탕 사기
준석이는 두 동생을 위해 사탕 가게에서 사탕을 최대한 많이 사 가려고 한다. 
사탕 가게에는 N개의 사탕 묶음이 있으며 i번째 사탕 묶음에는 a_i개의 사탕이 있다. 
준석이는 정말 부자라 사탕 묶음을 마음껏 살 수 있다. 하지만 준석이가 사간 총 사탕의 개수가 홀수가 되면 두 동생이 사탕을 한 개라도 더 갖기 위해 서로 싸울 것이라 총 짝수 개의 사탕을 가져가려고 한다. 준석이를 위해서 최대로 가져갈 수 있는 사탕의 개수를 구해주자!
첫째 줄에 사탕 묶음의 개수 N이 주어진다. (1 <= N <= 1000)
둘째 줄에 각각의 사탕 묶음에 담겨있는 사탕의 개수 a_1,a_2, ..., a_N가 주어진다. (1 <= a_i <= 1000)
입력으로 주어지는 모든 수는 정수이다.
준석이가 최대로 가져갈 수 있는 사탕의 개수를 출력한다.
사탕을 홀수 개로만 가져갈 수 있으면 0을 출력한다.

>>>코드

n = int(input())
o, e = [], []
candy = list(map(int, input().split()))
for i in range(n):
    if candy[i]%2 == 0:
        e.append(candy[i])
    else:
        o.append(candy[i])
o.sort(reverse = True)
j =(len(o)//2)*2
r = sum(e) + sum(o[:j])
print(r)
728x90
반응형
728x90
반응형

5/ 26 파이썬 공부
1. 백준 16431 베시와 데이지
농부 존은 소 베시와 소 데이지를 키우고 있습니다.
두 소는 자유롭게 1,000 × 1,000 2차원 격자 목초지를 누비며 놀고 있습니다. 
농부 존이 종을 치면 베시와 데이지가 농부 존이 있는 곳으로 달려갑니다. 
(생략)
베시가 B에 있을 때 1초 후에 움직일 수 있는 칸과 데이지가 D에 있을 때 1초 후에 움직일 수 있는 칸을 나타낸 그림

베시는 1초 후에 꼭짓점을 공유하는 8개의 칸 중 하나로 이동할 수 있고 데이지는 1초 후에 변을 공유하는 4개의 칸 중 하나로 이동할 수 있습니다. 칸들은 충분히 넓어서 칸 하나에도 베시와 데이지 그리고 존이 같이 서 있을 수 있습니다. 베시와 데이지 두 소 모두 최단 경로로 존에게 갈 때 어떤 소가 더 빨리 도착할까요?

첫 번째 줄에 베시의 좌표 Br, Bc (1 ≤ Br, Bc ≤ 1,000) 이 주어집니다.
두 번째 줄에 데이지의 좌표 Dr, Dc (1 ≤ Dr, Dc ≤ 1,000) 이 주어집니다.
세 번째 줄에 존의 좌표 Jr, Jc (1 ≤ Jr, Jc ≤ 1,000) 이 주어집니다.
처음에 존이 있는 칸에는 베시와 데이지가 없음이 보장됩니다.

첫 번째 줄에 베시가 더 빨리 도착하면 'bessie', 데이지가 더 빨리 도착하면 'daisy', 동시에 도착하면 'tie' 를 출력합니다.

>>>코드

b = list(map(int, input().split()))
d = list(map(int, input().split()))
j = list(map(int, input().split()))
D = abs(d[0]-j[0]) + abs(d[1]-j[1])
if abs(b[0]-j[0]) < abs(b[1]-j[1]):
    B = abs(b[1]-j[1])
else:
    B = abs(b[0]-j[0])
if D>B:
    print('bessie')
elif D<B:
    print('daisy')
else:
    print('tie')



2. 백준 11320 삼각 무늬 - 1
무엇이든 덮어버리는 것을 좋아하는 구사과는 한 변의 길이가 A인 정삼각형을 한 변의 길이가 B인 정삼각형으로 완전히 덮어버리고자 한다.
두 개의 정수 A, B가 주어지고, B ≤ A 이고, A를 B로 나눌 수 있을 때, 한 변의 길이가 A인 정삼각형을 완전하게 덮기 위한, 한 변의 길이가 B인 정삼각형의 개수를 구하라.
첫째 줄에 테스트 케이스의 개수 T가 주어진다. (T ≤ 100)
각각의 테스트 케이스는 한 줄로 이루어져 있으며 두 개의 정수 A, B가 (1 ≤ B ≤ A ≤ 1,000, B|A) 주어진다.
각 테스트 케이스마다 한 변의 길이가 A인 정삼각형을 완벽하게 덮을 수 있는 한 변의 길이가 B인 정삼각형의 최소 개수를 출력한다.

>>>코드

T = int(input())
for i in range(T):
    a, b = map(int, input().split())
    if a%b == 0:
        print((a//b)**2)
    else:
        print((a//b + 1)**2)



3. 백준 A/B - 3
두 정수 A와 B를 입력받은 다음, A/B의 몫과 나머지를 출력하는 프로그램을 작성하시오.
어떤 정수 q와 r에 대해 A = qB + r (0 ≤ r < |B|)로 나타낼 수 있을 때, q를 몫, r을 나머지라고 한다.
첫째 줄에 A와 B가 주어진다. (-10**10000 ≤ A, B ≤ 10**10000, B ≠ 0)
첫째 줄에 A/B의 몫, 둘째 줄에 나머지를 출력한다.

>>>코드

A, B = map(int, input().split())
q, r = A//B, A%B
if A != 0 and r < 0:
    q, r = A//B + 1, (A%B) -B
print('%d\n%d' %(q, r))


우리가 주의 해야할 것은 나머지 r의 범위 이다. 
나머지 r은 무조건 0 이상의 정수이기 때문에 음수가 나오면 양수로 바뀌게 처리 해야한다.

4. 백준 12790 Mini Fantasy War
넥슨지티에서는 최근 SRPG "슈퍼 판타지 워"의 후속작으로 "미니 판타지 워"를 출시하였다. 
전편과 마찬가지로, 미니 판타지 워에서도 각 캐릭터의 전투력을 계산하여야 한다. 
각 캐릭터의 전투력은 단순히 각 캐릭터의 능력치의 가중 합으로 계산된다. 
전투력 계산은 굉장히 간단한 로직이지만 게임 곳곳에 쓰이는 만큼, Being은 다른 프로그래머로 하여금 이 로직을 구현하여 자신의 것과 교차검증하고자 한다. 그리하여 당신은 이 전투력을 구현하는 작업을 맡게 되었다.
능력치는 모두 네 종류 존재한다. 이는 각각 HP, MP, 공격력, 방어력이다. 
각 캐릭터는 기본 능력치 4종을 바탕으로 장비를 장착할 수 있다. 
각 장비는 능력치를 변화시키는데, 그 변화되는 양이 입력으로 주어진다. 
따라서 캐릭터의 최종 능력치는 기본 능력치와 장비 능력치의 합으로 구성된다. 
단, HP와 MP는 1보다 작은 경우 1로 간주하며, 공격력은 0보다 작은 경우 0으로 간주한다. 
방어력은 음수 여부에 상관하지 않는다.

결정된 능력치에 따른 캐릭터의 최종 전투력은 아래와 같다:

전투력 = 1 * (HP) + 5 * (MP) + 2 * (공격력) + 2 * (방어력)

각 캐릭터의 기본 능력치와 장비에 의해 변화되는 능력치의 증감량이 주어질 때, 최종 전투력을 구하는 프로그램을 작성하여라.

입력의 첫 줄에는 능력치를 계산하여야 하는 캐릭터의 수, 또는 테스트 케이스의 수 T(1 ≤ T ≤ 1000)가 주어진다.
다음 T 행에 걸쳐 각각 8개의 정수가 주어진다. 
처음 네 개의 정수는 각각 캐릭터의 기본 HP, MP, 공격력, 방어력이다. 이 값들은 1 이상 999 이하로 주어진다.
다음 네 개의 정수는 각각 캐릭터의 장비에 의해 증감되는 HP, MP, 공격력, 방어력이다. 
이 값들은 -999 이상 999 이하로 주어진다.
각 캐릭터, 즉 각 테스트 케이스마다 한 줄에 하나씩 캐릭터의 최종 전투력을 출력한다.

>>>코드

for i in range(int(input())):
    H, M, A, D, h, m, a, d = map(int, input().split())
    H, M, A, D = H+h, M+m, A+a, D+d
    if H<1:
        H = 1
    if M<1:
        M = 1
    if A<0:
        A = 0
    print(1 * H + 5 * M + 2 * A + 2 * D)



5. 백준 10984 내 학점을 구해줘
게으른 근우는 열심히 놀다가 문득, 자신의 학점 평균이 얼마일지 궁금해졌다. 
학사시스템도 들어가기 귀찮아하는 근우를 위해 구해주도록 하자. 
첫 번째 줄에 학기의 수 T가 주어진다. 두 번째 줄부터 T개 학기에 대한 정보가 주어진다.
각 학기에 대한 정보는 다음과 같이 구성되어 있다. 
첫 번째 줄에 들었던 과목의 수 N이 주어지고, 다음 N개 줄에 걸쳐서 N개 과목들의 학점 C와 성적 G가 주어진다. 
(1 ≤ N ≤ 10, 1 ≤ C ≤ 6, C는 정수) G는 {0, 0.7, 1, 1.3, 1.7, 2, 2.3, 2.7, 3, 3.3, 3.7, 4, 4.3} 중 하나이며 소수 부분은 최대 한 자리까지 주어진다.
각 학기에 대해 근우의 총 학점과 평점(GPA)을 출력한다. 정답과의 절대 오차는 10**-1까지 허용한다.

>>>코드

for i in range(int(input())):
    n = int(input())
    C, G = 0, 0
    for j in range(n):
        c, g = map(float, input().split())
        C += c
        G += (g*c)
    print('%.0f %.1f' %(C, round(G/C, 1)))


        
6. 백준 2958 세 수
수학을 못해도 너무 못하는 상근이는 정인이에게 과외를 받고 있다. 오늘은 상근이가 사칙연산을 배우는 날이다.
정인이는 공책에 숫자 세개로 이루어진 등식을 적어주었다. 
(식은 자연수와 등호(=), 그리고 더하기, 빼기, 곱하기, 나누기 기호(+-*/)로 이루어져 있다)
상근이는 이런 등식을 사칙연산을 모르는 창영이게 자랑하다가 그만... 창영이는 숫자를 제외한 기호를 모두 지워버리고 말았다.
세 정수가 주어졌을 때, 원래 정인이가 적어준 등식을 구하는 프로그램을 작성하시오.
첫째 줄에 정인이가 적어준 세 정수가 주어진다. 이 수는 100보다 작거나 같은 자연수이다. 
항상 정답이 존재하는 경우만 입력으로 주어진다.
첫째 줄에 정인이가 원래 적어준 등식을 출력한다. 입력으로 주어진 숫자의 순서는 유지해야 하고, 등호 하나와 더하기, 빼기, 곱하기, 나누기 기호 중 하나로 이루어져 있어야 한다. 만약 등식이 여러 가지가 나올 수 있다면, 그 중 하나만 출력한다.

>>>코드

a, b, c = map(int, input().split())
if a+b == c:
    print('%d+%d=%d' %(a, b, c))
elif a == b+c:
    print('%d=%d+%d' %(a, b, c))
elif a-b == c:
    print('%d-%d=%d' %(a, b, c))
elif a == b-c:
    print('%d=%d-%d' %(a, b, c))
elif a*b == c:
    print('%d*%d=%d' %(a, b, c))
elif a == b*c:
    print('%d=%d*%d' %(a, b, c))
elif a//b == c and a%b == 0:
    print('%d/%d=%d' %(a, b, c))
elif a == b//c and b%c == 0:
    print('%d=%d/%d' %(a, b, c))



흠... 긴데 모든 케이스를 고려해서 다른 출력을 내야하므로 어쩔 수 없는 듯하다.

7. 백준 10699 오늘 날짜
서울의 오늘 날짜를 출력하는 프로그램을 작성하시오.
입력은 없다.
서울의 오늘 날짜를 "YYYY-MM-DD" 형식으로 출력한다.

>>>코드

print('2023-05-26')



진짜 오늘 날짜를 출력하면 된다.

8. 백준 15170 오늘의 날짜는?
2018 SCAL-MOOKJA에 출전하기로 한 무근이와 인서는 대회 준비를 위해 같이 모여 문제를 풀기로 했다.
그런데 어느 날, 일어나서 날짜를 확인해 보니 무근이와 인서의 시계가 서로 다른 날짜를 가리키고 있었다. 
두 사람이 정확한 날짜에 모일 수 있도록 문제를 푸는 지금 시각이 UTC+0(세계 표준시)을 기준으로 무슨 날짜인지 출력해 주는 프로그램을 작성하자.
만약 서울에서 확인한 시각이 2018년 9월 29일 오후 2시 정각이라면 UTC+0 기준의 시각은 2018년 9월 29일 오전 5시 정각이다.
이 문제는 입력이 없다.
지금 시각을 UTC+0(세계 표준시)을 기준으로 나타냈을 때의 연도, 월, 일을 한 줄에 하나씩 순서대로 출력한다.

>>>코드

print('2023')
print('05')
print('26')


동일하게 오늘 날짜를 세계표준시를 기준으로 출력하면 된다.
이건 뭔가 오히려 문제 내는 사람들이 서버시간을 읽는 방법을 코딩한게 더 대단한거 같다.

9. 백준 13136 Do Not Touch Anything
ACM-ICPC 대회의 대회장은 R행 C열의 직사각형 형태로 좌석이 배치되어 있다. 대회가 시작하기 전에는 참가자들이 아무것도 만지면 안 되기 때문에 진행자는 'Do not touch ANYTHING!!!'을 연신 외친다.
하지만, 진행자가 성대결절에 걸리면서 'Do not touch ANYTHING!!!'을 외칠 수 없는 처지가 되었다. 
따라서 주최측은 CCTV를 설치하여 참가자들을 감시하려고 한다. 
이때, 각 CCTV는 N행 N열의 직사각형 영역의 좌석을 촬영할 수 있다.
모든 좌석을 전부 촬영하도록 CCTV를 배치할 때, 최소 몇 개의 CCTV가 필요할까?
첫 번째 줄에 좌석의 세로 크기, 가로 크기 R, C와 한 대의 CCTV가 수용할 수 있는 범위 N이 주어진다. 
(1 ≤ R, C, N ≤ 1,000,000)
모든 좌석을 전부 촬영하도록 CCTV를 배치할 때, 필요한 CCTV의 최소 개수를 출력한다.

>>>코드

r, c, n = map(int, input().split())
if r%n == 0:
    R = r//n
else:
    R = r//n + 1
if c%n == 0:
    C = c//n
else:
    C = c//n +1
print(R*C)



10. 백준 11586 지영 공주님의 마법 거울
천나라 민호성의 지영 공주님은 매우 아름답다. 공주님 자신도 이 세상 그 누구보다 자신이 아름답다는 것을 알고 있다. 공주님은 자신의 아름다움이 세월의 저편으로 사라지는 것을 매우 두려워한다. 그래서 하루에도 수십 수백 번씩 거울을 보며 자신의 모습이 여전히 아름다운지 확인을 거듭한다. 그러던 어느 날, 세상의 다양한 장면들을 담고 싶었던 공주님의 마법거울은 매일 똑같은 모습만을 비추는 자신의 운명에 좌절하며 앞으로의 운명을 개척하기로 결심했다. 마법거울은 매일 자신의 심리상태에 따라 거울에 비친 공주님의 모습을 좌/우 또는 상/하로 반전시켜 비추기로 한다. 마법거울의 심리상태는 1부터 3까지의 자연수로 표현할 수 있으며, 숫자가 클수록 더 화가 난 상태를 의미한다. 마법거울의 심리상태가 1일 때는 지영 공주님의 모습을 있는 그대로 표현하고, 2일 때는 좌/우로 반전된 모습을, 3일 때는 상/하로 반전된 모습을 표현한다. 정사각형 형태의 마법거울의 크기와 거울에 비친 지영 공주님의 원래 모습, 마법거울의 심리상태가 주어졌을 때, 마법거울에 비친 지영 공주님의 모습을 출력하라.

첫 번째 줄에 정사각형 모양의 마법거울의 크기를 나타내는 자연수 N(2 ≤ N ≤ 100)이 입력된다. 그 다음 N개의 줄에 걸쳐 거울에 비친 지영 공주님의 원래 모습이 각 줄에 N개의 문자로 표현된다. 마법거울은 알파벳 대소문자로만 거울에 비친 상을 표현할 수 있다. 마지막 줄에 마법거울의 심리상태를 나타내는 정수 K(1 ≤ K ≤ 3)가 주어진다.
마법거울의 심리상태에 따라 거울에 비친 지영공주님의 모습을 N×N크기의 정사각형 형태로 출력하라. 반전된 모습은 입력으로 주어진 문자의 위치를 반전시키는 것을 의미한다.

>>>코드

n = int(input())
mirror = []
for i in range(n):
    mirror.append(input())
k = int(input())
if k == 1:
    for i in range(n):
        print(mirror[i])
elif k == 2:
    for i in range(n):
        print(mirror[i][::-1])
else:
    for i in range(n):
        print(mirror[n-1-i])



11. 백준 20053 최소, 최대 2
N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 두 줄로 이루어져 있다.
각 테스트 케이스의 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
각 테스트 케이스마다 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 한 줄에 하나씩 차례대로 출력한다.

>>>코드

for i in range(int(input())):
    n = int(input())
    N = list(map(int, input().split()))
    print('%d %d' %(min(N), max(N)))



12. 백준 18883 N M 찍기
자연수 N, M이 주어졌을 때, 1부터 N×M까지 출력 형식대로 출력해보자.
첫째 줄에 공백 한 칸으로 구분한 N, M이 주어진다. 두 수는 1,000보다 작거나 같은 자연수이다.
총 N개의 줄을 출력해야 한다. 각 줄에는 M개의 정수를 공백 한 칸으로 구분해 출력해야 한다. 1번 줄에는 1부터 M까지, 2번 줄에는 M+1부터 2×M까지, ..., N번 줄에는 (N-1)×M+1부터 N×M까지 출력해야 한다.
모든 줄의 시작과 끝에 공백이 있으면 안되고, 모든 줄은 줄바꿈(\n)으로 끝나야 한다.

>>>코드

n, m = map(int, input().split())
r = 1
for i in range(n):
    N = [r+j for j in range(m)]
    print(*N)
    r += m


포인트는 모든 줄의 시작과 끝에 공백이 있으면 안된다는 것

728x90
반응형
728x90
반응형

5/ 25 파이썬 공부
1. 백준 25630 팰린드롬 소떡소떡
소떡소떡은 기다란 꼬치에 소세지와 떡을 끼운 음식이다. 
편의상 소떡소떡을 알파벳 s와 t로만 구성된 길이 N의 문자열로 생각하자. 알파벳 s는 소세지를, t는 떡을 의미한다.
위 그림은 길이가 7인 소떡소떡의 예시이다. 
유진이는 소떡소떡을 먹기 전에 소떡소떡을 팰린드롬 소떡소떡으로 만들려고 한다. 
팰린드롬이란, 앞에서부터 읽었을 때와 뒤에서부터 읽었을 때가 같은 문자열을 말한다. 
예를 들어 sts, tsst, tt는 팰린드롬이다.
유진이는 특별한 마법을 사용해서 꼬치에 꽂힌 소세지 하나를 떡으로 바꾸거나, 반대로 떡 하나를 소세지로 바꿀 수 있다. 위 그림은 마법을 한 번 사용해서 떡 하나를 소세지로 바꾼 그림이다.
위 그림은 마법을 한 번 더 사용해서 떡 하나를 소세지로 바꾼 그림이다.
이제 이 소떡소떡은 팰린드롬 소떡소떡이 되었다.
유진이가 먹으려고 하는 소떡소떡이 주어질 때, 이 소떡소떡을 팰린드롬 소떡소떡으로 만들기 위해서는 마법을 최소 몇 번 사용해야 할까?
첫째 줄에 소떡소떡의 길이 N(1 <= N <= 100)이 주어진다.
둘째 줄에 소떡소떡을 의미하는 길이 N의 문자열이 주어진다. 이 문자열은 알파벳 s와 t로만 구성되어 있다.
소떡소떡을 팰린드롬 소떡소떡으로 만들기 위해서 마법을 최소 몇 번 사용해야 하는지 출력한다.

>>>코드

n = int(input())
s = input()
r = 0
for i in range(n//2):
    if s[i] != s[n-1-i]:
        r += 1
print(r)



2. 백준 25641 균형 잡힌 소떡소떡
소떡소떡은 기다란 꼬치에 소세지와 떡을 끼운 음식이다. 
편의상 소떡소떡을 알파벳 s와 t로만 구성된 길이 N의 문자열로 생각하자. 
알파벳 s는 소세지를, t는 떡을 의미한다.
위 그림은 길이가 7인 소떡소떡의 예시이다. 
유진이는 소떡소떡을 먹기 전에 소떡소떡을 균형 잡힌 소떡소떡으로 만들려고 한다. 
꼬치에 꽂힌 소세지와 떡의 개수가 같을 때 이를 균형 잡힌 소떡소떡이라고 한다. 
단, 소세지와 떡이 한 개도 꽂혀있지 않다면 균형잡힌 소떡소떡이 아니다. 
위 그림은 소세지가 3개, 떡이 4개 꽂혀 있기 때문에 균형 잡힌 소떡소떡이 아니다.
유진이는 소떡소떡의 맨 왼쪽에 있는 소세지나 떡을 떼어낼 수 있다. 
오른쪽은 손잡이 부분이기 때문에 오른쪽에서 떼어내는 것은 불가능하다. 
위 그림은 소떡소떡의 맨 왼쪽에 있던 소세지를 떼어낸 그림이다.
위 그림은 떡 두 개를 더 떼어낸 그림이다. 소세지가 2개, 떡이 2개 꽂혀 있기 때문에 균형 잡힌 소떡소떡이 되었다. 유진이가 먹으려고 하는 소떡소떡이 주어질 때, 이러한 과정을 통해 만들 수 있는 길이가 최대인 균형 잡힌 소떡소떡은 어떤 모양일까?
첫째 줄에 소떡소떡의 길이 N(2 <= N <= 100)이 주어진다.
둘째 줄에 소떡소떡을 의미하는 길이 N의 문자열이 주어진다. 이 문자열은 알파벳 s와 t로만 구성되어 있다.
위 과정을 통해 균형 잡힌 소떡소떡으로 만들 수 없는 입력은 주어지지 않는다.
이러한 과정을 통해 만들 수 있는 길이가 최대인 균형 잡힌 소떡소떡의 모양을 출력한다.

>>>코드

n = int(input())
s = list(input())
while s.count('t') != s.count('s'):
    del s[0]
print(''.join(s))



1) 리스트의 요소들을 제거하는 방법
- 인덱스(index)로 제거: del 리스트[인덱스]
입력한 인덱스의 요소를 제거하는 함수

- 마지막 요소 제거: 리스트.pop()
마지막 요소를 제거하는 함수.
만약 리스트.pop(-1)로 사용한다면 첫번째 요소를 제거한다.

- 값(value)으로 제거: 리스트.remove(제거 할 요소)
입력한 요소를 리스트에서 제거한다.
입력한 요소가 리스트 내에 여러개 존재할 때는 가장 첫번째의 것만 제거한다.

3. 백준 25756 방어율 무시 계산하기
메이플스토리에는 방어율 무시라는 수치가 있다. 
특정 보스를 잡기 위해서는 특정 방어율 무시 수치가 되어야 데미지가 정확히 들어가는 시스템으로 이루어져 있다. 
물약 아이템을 사용하여 방어율 무시 수치를 증가시킬 수 있다.
현재 방어율 무시 수치가 V인 상태에서, 수치가 A_i인 물약을 마시면 새로운 방어율 무시 수치는 아래와 같이 계산된다.

1 - (1 - V)(1 - A_i)

주어지는 물약의 방어율 무시 값의 단위는 퍼센트이다.
기본 방어율 무시 수치는 0%라고 가정한다.
임스가 가지고 있는 물약 N개의 방어율 무시 수치가 주어졌을 때, 물약을 순서대로 마시면서 변화된 방어율 무시 수치를 모두 출력하시오.
첫 번째 줄에는 임스가 가지고 있는 물약의 개수 N이 주어진다. (1 <= N <= 40,000)
두 번째 줄에는 임스가 가지고 있는 물약으로 인해 증가되는 방어율 무시 수치를 의미하는 정수 A_1, A_2, ..., A_N가 공백으로 구분되어 주어진다. (1 <= A_i <= 30)
N개의 줄에 걸쳐 임스가 물약을 마시면서 증가된 방어율 무시 수치를 출력하시오. 
절대/상대 오차는 10^(-6)까지 허용한다.

>>>코드

n = int(input())
potion = list(map(float, input().split()))
v = 0
for i in range(n):
    v = (1 - (1 - v/100)*(1 - potion[i]/100)) * 100
    print(v)



퍼센트라는 것을 유의 하자

4. 백준 11721 열 개씩 끊어 출력하기
알파벳 소문자와 대문자로만 이루어진 길이가 N인 단어가 주어진다.
한 줄에 10글자씩 끊어서 출력하는 프로그램을 작성하시오.
첫째 줄에 단어가 주어진다. 단어는 알파벳 소문자와 대문자로만 이루어져 있으며, 길이는 100을 넘지 않는다. 
길이가 0인 단어는 주어지지 않는다.
입력으로 주어진 단어를 열 개씩 끊어서 한 줄에 하나씩 출력한다. 
단어의 길이가 10의 배수가 아닌 경우에는 마지막 줄에는 10개 미만의 글자만 출력할 수도 있다.

>>>코드

s = input()
p = 0
while p <= len(s):
    print('%s' %(s[p:p+10]))
    p += 10



5. 백준 11719 그대로 출력하기 2
입력 받은 대로 출력하는 프로그램을 작성하시오.
입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 
각 줄은 100글자를 넘지 않으며, 빈 줄이 주어질 수도 있고, 각 줄의 앞 뒤에 공백이 있을 수도 있다.
입력받은 그대로 출력한다.

>>>코드

while True:
    try:
        print(input())
    except:
        break


너무 쉬워보일때는 오류 처리 문제일때가 많다

6. 백준 15953 상금 헌터
2017년에 이어, 2018년에도 카카오 코드 페스티벌이 개최된다!
카카오 코드 페스티벌에서 빠질 수 없는 것은 바로 상금이다. 2017년에 개최된 제1회 코드 페스티벌에서는, 본선 진출자 100명 중 21명에게 아래와 같은 기준으로 상금을 부여하였다.

순위 상금       인원
1등 500만원 1명
2등 300만원 2명
3등 200만원 3명
4등 50만원   4명
5등 30만원       5명
6등 10만원  6명

2018년에 개최될 제2회 코드 페스티벌에서는 상금의 규모가 확대되어, 본선 진출자 64명 중 31명에게 아래와 같은 기준으로 상금을 부여할 예정이다.

순위 상금       인원
1등 512만원 1명
2등 256만원 2명
3등 128만원 4명
4등 64만원       8명
5등 32만원       16명

제이지는 자신이 코드 페스티벌에 출전하여 받을 수 있을 상금이 얼마인지 궁금해졌다. 
그는 자신이 두 번의 코드 페스티벌 본선 대회에서 얻을 수 있을 총 상금이 얼마인지 알아보기 위해, 상상력을 발휘하여 아래와 같은 가정을 하였다.

- 제1회 코드 페스티벌 본선에 진출하여 a등(1 ≤ a ≤ 100)등을 하였다. 
단, 진출하지 못했다면 a = 0으로 둔다.
- 제2회 코드 페스티벌 본선에 진출하여 b등(1 ≤ b ≤ 64)등을 할 것이다. 
단, 진출하지 못했다면 b = 0으로 둔다.

제이지는 이러한 가정에 따라, 자신이 받을 수 있는 총 상금이 얼마인지를 알고 싶어한다.
첫 번째 줄에 제이지가 상상력을 발휘하여 가정한 횟수 T(1 ≤ T ≤ 1,000)가 주어진다.
다음 T개 줄에는 한 줄에 하나씩 제이지가 해본 가정에 대한 정보가 주어진다. 
각 줄에는 두 개의 음이 아닌 정수 a(0 ≤ a ≤ 100)와 b(0 ≤ b ≤ 64)가 공백 하나를 사이로 두고 주어진다.
각 가정이 성립할 때 제이지가 받을 상금을 원 단위의 정수로 한 줄에 하나씩 출력한다. 
입력이 들어오는 순서대로 출력해야 한다.

>>>코드

s7 = [5000000, 3000000, 3000000, 2000000, 2000000, 2000000, 500000, 500000, 500000, 500000, 300000, 300000, 300000, 300000, 300000, 100000, 100000, 100000, 100000, 100000, 100000]
s8 = [5120000, 2560000, 2560000, 1280000, 1280000, 1280000, 1280000, 640000, 640000, 640000, 640000, 640000, 640000, 640000, 640000, 320000, 320000, 320000, 320000, 320000, 320000, 320000, 320000, 320000, 320000, 320000, 320000, 320000, 320000, 320000, 320000]
T = int(input())
for i in range(T):
    a, b = map(int, input().split())
    r = 0
    if a != 0 and a<=21:
        r += s7[a-1]
    if b != 0 and b<=31:
        r += s8[b-1]
    print(r)



7. 백준 10707 수도요금
JOI군이 살고 있는 지역에는 X사와 Y사, 두 개의 수도회사가 있다. 
두 회사의 수도요금은 한 달간 수도의 사용량에 따라 다음과 같이 정해진다.

- X사 : 1리터당 A엔.
- Y사 : 기본요금은 B엔이고, 사용량이 C리터 이하라면 요금은 기본요금만 청구된다. 사용량이 C리터가 넘었을 경우 기본요금 B엔에 더해서 추가요금이 붙는다. 추가요금은 사용량이 C리터를 넘었을 경우 1리터를 넘었을 때마다 D엔이다.

JOI군의 집에서 한 달간 쓰는 수도의 양은 P리터이다.
수도요금이 최대한 싸게 되도록 수도회사를 고를 때, JOI군의 집의 1달간 수도요금을 구하여라.
입력은 5줄이고 한 줄에 하나씩 정수가 입력된다.

- 첫 번째 줄에는 X사의 1리터당 요금 A가 입력된다.
- 두 번째 줄에는 Y사의 기본요금 B가 입력된다.
- 세 번째 줄에는 Y사의 요금이 기본요금이 되는 사용량의 상한 C가 입력된다.
- 네 번째 줄에는 Y사의 1리터 당 추가요금 D가 입력된다.
- 다섯 번째 줄에는 JOI군의 집에서 사용하는 한 달간 수도의 양 P가 입력된다.

입력되는 정수 A,B,C,D,P는 전부 1 이상 10000 이하이다.
JOI군의 집에서 지불하는 한 달간 수도요금을 첫째 줄에 출력한다.

>>>코드

A = int(input())
B = int(input())
C = int(input())
D = int(input())
P = int(input())
x = A*P
if P>C:
    y = (P-C)*D + B
else:
    y = B
if x<y:
    print(x)
else:
    print(y)



8. 백준 4690 완전 세제곱
페르마의 마지막 정리는, a, b, c가 0이 아닌 정수이고, n이 2보다 큰 자연수 일 때, an = bn + cn을 만족하는 자연수 a, b, c가 존재하지 않는다는 정리이다. 이 정리는 아직 증명되지 않았다.
하지만, 완전 세제곱 방정식 a**3 = b**3 + c**3 + d**3을 만족하는 1보다 큰 자연수를 찾는 것은 어렵지 않다. 
(123 = 63 + 83 + 103)
이러한 완전 세제곱 방정식과 a ≤ 100을 만족하는 {a, b, c, d}쌍을 모두 찾는 프로그램을 작성하시오.
이 문제는 입력이 없다.
a값이 증가하는 순서대로 아래 출력 형식과 같이 출력한다. b, c, d도 증가하는 순서로 이루어져야 한다.
a값에 해당하는 b, c, d쌍이 여러 개 존재할 수 있다. 이때는 b 값이 작은 것부터 먼저 출력한다.
아래 출력 예제는 일부분만 나와있다.

>>>예제
Cube = 6, Triple = (3,4,5)
Cube = 12, Triple = (6,8,10)
Cube = 18, Triple = (2,12,16)
Cube = 18, Triple = (9,12,15)
Cube = 19, Triple = (3,10,18)
Cube = 20, Triple = (7,14,17)
Cube = 24, Triple = (12,16,20)

>>>코드

for a in range(2, 101):
    for b in range(2, 101):
        for c in range(b+1, 101):
            for d in range(c+1, 101):
                if a**3 == b**3 + c**3 + d**3:
                    print('Cube = %d, Triple = (%d,%d,%d)' %(a, b, c, d))
                if a**3 < b**3 + c**3 + d**3:
                    break



다중 반복문이 4중첩이라 어지러울 수 있으나
단순한 코드이다

9. 백준 20540 연길이의 이상형
졸업을 앞둔 연길이는 크리스마스가 다가올수록 외로움을 느낀다.
그런 연길이를 위해 동우는 소개팅을 시켜주지는 않고 연길이의 이상향을 찾는 것을 도와주고자 한다.
MBTI 신봉자인 연길이는 자신과 정반대인 사람에게 매력을 느낀다. 
즉, MBTI의 네가지 지표가 모두 자신과 반대인 사람이 연길이의 이상형이다.
MBTI는 다음과 같은 네 가지 척도로 성격을 표시한다. 각각의 척도는 두 가지 극이 되는 성격으로 이루어져 있다.

                          지표                                  설명
외향(Extroversion) 내향(Introversion)  선호하는 세계:세상과 타인 / 내면 세계
감각(Sensation) 직관(iNtuition)  인식형태: 실제적인 인식/ 실제 너머로 인식
사고(Thinking) 감정(Feeling)  판단기준: 사실과 진실 위주 / 관계와 사람 위주
판단(Judging) 인식(Perceiving)  생활양식: 계획적인 생활 / 즉흥적인 생활

네 가지 척도마다 두 가지 경우가 존재하므로, 총 16가지의 유형이 만들어진다. 유형은 각 경우를 나타내는 알파벳 한 글자씩을 따서 네 글자로 표시한다. 다음은 MBTI의 유형들이다.

구분    감각/사고    감각/감정 직관/감정  직관/사고
내향/판단 ISTJ     ISFJ   INFJ INTJ
내향/인식 ISTP     ISFP   INFP INTP
외향/인식 ESTP     ESFP   ENFP ENTP
외향/판단 ESTJ     ESFJ   ENFJ ENTJ
연길이가 자신의 이상향을 무사히 찾을 수 있도록 도와주자!
연길이의 MBTI 4글자가 대문자로 주어진다.
연길이의 이상형에 해당하는 MBTI 4글자를  대문자로 출력한다.

>>>코드1

mbti = list(input())
if mbti[0] == 'I':
    mbti[0] = 'E'
else:
    mbti[0] = 'I'
if mbti[1] == 'N':
    mbti[1] = 'S'
else:
    mbti[1] = 'N'
if mbti[2] == 'F':
    mbti[2] = 'T'
else:
    mbti[2] = 'F'
if mbti[3] == 'J':
    mbti[3] = 'P'
else:
    mbti[3] = 'J'
print(''.join(mbti))



좀긴데

>>>코드2

MBTI = ['E','I','S','N','T','F','J','P']
mbti = list(input())
for i in range(len(mbti)):
    MBTI.remove(mbti[i])
print(''.join(MBTI))


오 확 편해졌다

10. 백준 6131 완전 제곱수
상근이는 선영이와 함께 게임을 하고 있다. 먼저, 상근이는 두 양의 정수 A와 B를 고른다. (1 ≤ B ≤ A ≤ 500) 
그 다음, 선영이는 상근이가 고른 수를 맞춰야 한다.
상근이는 선영이에게 다음과 같은 힌트를 주었다.
A의 제곱은 B의 제곱보다 N만큼 커 (1 ≤ N ≤ 1,000)
위의 힌트 조건을 만족하는 A와 B 쌍의 개수를 구하는 프로그램을 작성하시오.
첫째 줄에 N이 주어진다.
상근이의 힌트 조건을 만족하는 (A,B) 쌍의 개수를 출력한다. 

>>>코드

N = int(input())
r = 0
for B in range(1, 1001):
    for A in range(B, 1001):
        if A**2 - B**2 == N:
            r += 1
print(r)



11. 백준 15633 Fan Death
선풍기 사망설(fan death)은 우리나라에 존재하는 미신 중 하나이다. BOJ에도 fan death가 있는데, 그것은 BOJ를 만든 백준님에 대한 팬심을 치사량 이상으로 흡입(?)하여 사망하게 된다는 미신이다.
이 문제에서는 당신이 fan death에 다다를 수 있을 정도로 백준님과 BOJ를 사랑하는지 확인할 것이다.
자연수 n이 주어졌을 때, n의 모든 약수(1과 n을 포함)의 합을 구하시오.
이 문단은 광고 차단 기능을 쓰지 않는 유저에게만 보인다. 
BOJ에게 광고비를 제공할 의향이 있는 당신은 충분한 팬심을 가지고 있다. 
이제 구한 값에 5를 곱하고 24를 빼서 출력하면 된다.
자연수 n(1 ≤ n ≤ 10,000)이 한 줄에 걸쳐 주어진다.
답을 출력한다.

>>>코드

n = int(input())
r = 0
for i in range(1, n+1):
    if n%i == 0:
        r += i
print(r*5-24)
728x90
반응형
728x90
반응형

5/ 24 파이썬 공부
1. 백준 5063 TGN
상근이는 TGN사의 사장이다. 
TGN은 Teenager Game Network의 약자 같지만, 사실 Temporary Group Name의 약자이다.
이 회사는 청소년을 위한 앱을 만드는 회사이다. 
일년에 걸친 개발기간 끝에 드디어 앱을 완성했고, 이제 팔기만 하면 된다.
상근이는 데이트를 인간의 두뇌로 이해할 수 없을 정도로 많이 한다. 따라서 엄청난 데이트 비용이 필요하다. 
상근이는 광고를 적절히 해서 수익을 최대한 올리려고 한다.
어느 날 하늘을 바라보던 상근이는 시리우스의 기운을 받게 되었고, 광고 효과를 예측하는 능력을 갖게 되었다.
광고 효과가 주어졌을 때, 광고를 해야할지 말아야할지 결정하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 개수 N이 주어진다. 다음 N개의 줄에는 3개의 정수 r, e, c가 주어진다. r은 광고를 하지 않았을 때 수익, e는 광고를 했을 때의 수익, c는 광고 비용이다. (-10**6 ≤ r,e ≤ 10**6, 0 ≤ c ≤ 10**6)
각 테스트 케이스에 대해서, 광고를 해야 하면 "advertise", 하지 않아야 하면 "do not advertise", 광고를 해도 수익이 차이가 없다면 "does not matter"를 출력한다.

>>>코드

N = int(input())
for i in range(N):
    r, e, c = map(int, input().split())
    if r> e-c:
        print('do not advertise')
    elif r< e-c:
        print('advertise')
    else:
        print('does not matter')



2. 백준 5217 쌍의 합
1보다 크거나 같고 12보다 작거나 같은 자연수 n이 주어졌을 때, 
합이 n이 되는 두 자연수의 쌍을 찾는 프로그램을 작성하시오.
예를 들어, 5가 주어진 경우 가능한 쌍은 1,4와 2,3이 있다. 두 수는 항상 달라야 한다. 
즉, 3,3은 올바른 쌍이 아니다. 또, 첫 번째 수가 두 번째 수보다 작아야 한다.
출력하는 쌍은 항상 사전순으로 출력해야 한다. 즉, 각 쌍의 작은 수로 비교를 해야 한다. 
예를 들어 1,5는 2,4보다 사전순으로 앞선다.
첫째 줄에 테스트 케이스의 수 (< 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, n이 주어진다.
각 테스트 케이스마다 n을 만드는 쌍을 사전순으로 출력한다. 
n을 만드는 쌍이 없는 경우에는 아무것도 출력하지 않는다.
예제 출력 형식을 참고해 출력한다.

>>>예제
입력
4
2
3
4
5

출력
Pairs for 2:
Pairs for 3: 1 2
Pairs for 4: 1 3
Pairs for 5: 1 4, 2 3

>>>코드

for i in range(int(input())):
    n = int(input())
    print('Pairs for %d: ' %(n), end = '')
    for j in range(1, n//2 + 1):
        if j != n-j:
            print('%d %d' %(j, n-j), end = '')
        if j != n//2 and j+1 != n-j-1:
            print(', ', end = '')    
    print()


3. 백준 28061 레몬 따기
성우는 숲에서 레몬을 따와야 한다. 숲은 하나의 수직선으로 표현할 수 있고, 여기에는 레몬 나무 N그루가 x=1부터 x=N까지 일정한 간격으로 자라 있다. 성우는 현재 x=0에 있으며, 집은 x=N+1에 있다. x=i에 위치한 나무에는 a_i개의 레몬이 자라 있다. 성우는 집에 돌아갈 때까지 매번 다음 중 하나를 선택하여 행동한다.

(1) 채집: 나무에 자라있는 레몬을 모두 딴다. 이 행동은 최대 한 번 할 수 있다.
(2) 이동: 현재 위치가 x=i라면, x=i+1로 이동한다.
하지만 레몬을 담을 보따리에는 구멍이 뚫려 있었다. 
성우가 이동(행동 2)할 때마다, 보따리에 레몬이 담겨 있다면 보따리에 담긴 레몬이 1개 빠져나오고, 이는 다시 주울 수 없다. 성우가 집에 들고 갈 수 있는 레몬의 최대 개수를 구해주자!

첫째 줄에 나무의 수 N이 주어진다. (1 <= N <= 2 * 10^5)

둘째 줄에는 x=i에 위치한 나무에 자라 있는 레몬의 개수 a_i가 차례대로 주어진다. 
(1 <= a_i <= 10^9)

>>>코드

n = int(input())
lemon = list(map(int, input().split()))
for i in range(n):
    lemon[i] = lemon[i] - (n-i)
print(max(lemon))



4. 백준 28014 첨탑 밀어서 부수기
자랑스러운 부산대학교의 새내기인 산지니는 일직선상의 등굣길을 가로막고 있는 정체불명의 첨탑들을 밀어 넘어뜨려서 부수기로 하였다.
첨탑은 일렬로 줄지어 서 있으며 산지니가 첨탑을 앞에서 밀면 뒤로 밀려 넘어진다.
밀려 넘어지는 첨탑의 높이가 바로 그다음 첨탑의 높이보다 클 때만 그다음 첨탑도 밀려 넘어진다.
산지니가 모든 첨탑을 밀어 넘어뜨리기 위해서 몇 번을 밀어야 하는지 구하여라. 
산지니는 반드시 앞으로만 이동하며 길을 우회하지 않는다.
첫째 줄에 첨탑의 개수 N이 주어진다. (1 <= N <= 5,000,000)
둘째 줄에는 앞에서부터 차례대로 첨탑의 높이 H_1, H_2, ..., H_n (1 <= H_i <= 1,000,000) 이 주어진다.
입력으로 주어지는 모든 수는 정수이다.
첫째 줄에 첨탑을 밀어야 하는 횟수를 출력하라.

>>>코드

n = int(input())
height = list(map(int, input().split()))
r = n
for i in range(n-1):
    if height[i] > height[i+1]:
        r -= 1
print(r)



5. 백준 25965 미션 도네이션
리그오브전설 스트리머 순범이는 트위치 플랫폼으로 시청자를 끌어모으고 있다. 
순범이는 '트윕' 음성 도네이션을 통해 시청자들과 소통하고는 한다. 
순범이는 트윕에 '미션' 기능이 있다는 것을 알고, 자신의 리그오브 전설 실력을 활용해 매 게임마다 미션 기능으로 돈을 끌어모으려고 한다. 미션 기능을 이용하는 시청자가 너무 많을 때도 있어서 순범이는 게임이 끝난 후 자신이 미션으로 받을 수 있는 총 도네이션 금액이 얼마인지를 구하는 계산 프로그램을 작성하고자 한다. 각 게임들은 여러 개의 미션으로 이루어져 있으며, 각 미션들은 킬당 K원 추가, 데스당 D원 차감, 어시스트당 A원 추가의 형식으로 주어진다. 만약 어떤 미션의 계산 금액이 0보다 작은 경우에는 총 금액에 이를 합산하지 않는다. 각 게임을 새로 시작할 때에는 도네이션 금액은 0부터 시작한다. 순범이가 각 게임을 마칠 때마다 받게 되는 총 도네이션 금액을 구해보자.
첫 줄에 총 게임의 수 N이 주어진다. (1 <= N <= 50)
각 게임마다 첫 줄에 총 미션의 수 M이 주어지며, M개의 줄에 거쳐 각 미션의 내용이 주어진다. (1 <= M <= 100)
각 미션들은 킬당 추가해야 하는 금액 K, 데스당 차감해야 하는 금액 D, 어시스트당 추가해야 하는 금액 A가 공백으로 구분되어 주어진다. (1,000 <= K, D, A <= 5 * 10^7)
각 게임당 마지막 줄에 게임이 종료된 후 순범이의 킬 k, 데스 d, 어시스트 a가 공백으로 구분해 주어진다. 
(0 <= k,d,a <= 50)
각 게임마다 순범이가 받는 총 도네이션 금액을 순서대로 한 줄씩 출력한다.

>>>코드

T = int(input())
for i in range(T):
    n = int(input())
    k, d, a, donation = [], [], [], []
    for j in range(n):
        kk, dd, aa = map(int, input().split())
        k.append(kk)
        d.append(dd)
        a.append(aa)
    K, D, A = map(int, input().split())
    for j in range(n):
        don = K * k[j] + A * a[j] - D * d[j]
        if don<0:
            don = 0
        donation.append(don)
    print(sum(donation))



6. 백준 27736 찬반투표
중앙대학교에서 재학생을 대상으로 하는 어떤 찬반투표가 치러졌다. 
모든 재학생은 각자 찬성이나 반대, 혹은 기권 중 하나로 투표에 응답하였다.
해당 투표에서 찬성이 반대보다 많으면 투표가 통과된다. 
반대가 찬성보다 많거나, 반대와 찬성의 수가 동일하다면 투표는 통과되지 않는다. 
단, 기권한 사람이 재학생의 절반 이상이라면 찬성과 반대의 수와 관계없이 항상 투표는 무효 처리된다.
재학생들의 투표 내역을 입력받아 찬반투표의 결과를 출력하는 프로그램을 구현하시오.
첫 번째 줄에 중앙대학교 재학생의 수 N이 주어진다.
두 번째 줄에 N개의 투표 내역이 공백으로 구분되어 주어진다. 각각 찬성은 1, 반대는 -1, 기권은 0으로 주어진다.
투표가 통과되었으면 APPROVED, 통과되지 않았으면 REJECTED, 무효 처리되었으면 INVALID를 출력한다.

>>>코드

n = float(input())
vote = list(map(int, input().split()))
if vote.count(0) >= n/2:
    print('INVALID')
else:
    if sum(vote)>0:
        print('APPROVED')
    else:
        print('REJECTED')


7. 백준 27465 소수가 아닌 수
이 대회의 운영진 중 한 명인 KSA 학생은 17시와 19시를 구별할 수 없다. 
이는 당연하게도 17과 19가 모두 소수이기 때문일 것이다. 시간을 제대로 구별해서 KSA의 명예를 지키기 위해 정수 N을 입력받아서 소수가 아닌 N 이상의 정수를 아무거나 구해주자.
첫 번째 줄에 정수 N이 주어진다.
문제의 정답을 출력한다. 정답은 10^9 이하여야 한다.
정답이 여러 개 존재한다면 아무거나 출력해도 상관없다.

-제한
 1 <= N <= 10^9

>>>코드

N = int(input())
print(10**9)


문제에 속지말자. 괜히 곱하거나 구해서 새로운 수 만들지 말고, 수의 범위 중에 가장 큰 소수가 아닌 수.
즉 10**9를 출력하면 된다.

8. 백준 26645 성장의 비약 선택권
지훈이가 즐겨 하는 게임인 ‘메이플스토리’에는 레벨과 경험치가 존재한다. 
메이플스토리에서 캐릭터의 레벨을 올리기 위해서는 많은 몬스터를 사냥하여 경험치를 얻어야 하지만, 다행히도 레벨업의 난이도를 낮추기 위해 다량의 경험치를 얻을 수 있는 아이템 ‘성장의 비약’이 존재한다.
이벤트로 가끔 얻을 수 있는 ‘성장의 비약 선택권’을 사용하면 위 사진처럼 네 가지의 성장의 비약 중 한 가지를 선택하여 적힌 개수만큼 얻을 수 있다. 캐릭터의 현재 레벨을 포함하는 구간의 성장의 비약을 사용하면 캐릭터의 레벨이 정확히 1만큼 오른다. 태풍 성장의 비약은 200 ~ 239레벨의 캐릭터를 정확히 1레벨 올려준다. 모든 성장의 비약은 한번에 한 개씩 사용할 수 있고, 캐릭터의 현재 레벨을 포함하지 않는 구간의 성장의 비약은 사용하지 못한다.
지훈이가 성장의 비약을 사용할 캐릭터의 현재 레벨이 주어졌을 때, 어떤 성장의 비약을 선택해야 가장 높은 레벨에 도달할 수 있는지 알려주자!
만약 가장 높은 레벨에 도달할 수 있는 성장의 비약의 종류가 둘 이상이라면, 사진상 더 아래에 있는 성장의 비약을 선택한다.
첫 번째 줄에 지훈이가 성장의 비약을 사용할 캐릭터의 현재 레벨을 나타내는 정수 N이 주어진다. 
(200 <= N <= 239)
지훈이가 선택해야 할 성장의 비약이 '성장의 비약 (200 ~ 209)'이라면 1, '성장의 비약 (200 ~ 219)'이라면 2, '성장의 비약 (200 ~ 229)'이라면 3, '태풍 성장의 비약'이라면 4를 출력한다. 

+a) 비약 개수
성장의 비약(200 ~ 209): 8개
성정의 비약(200 ~ 219): 4개
성장의 비약(200 ~ 229): 2개
태풍 성장의 비약: 1개

>>>코드

n = int(input())
if n<206:
    print(1)
elif n<218:
    print(2)
elif n<229:
    print(3)
else:
    print(4)



조건들만 잘 이해하자

9. 백준 26594 ZOAC 5
2022년 12월, 다섯 번째로 개최된 ZOAC의 오프닝을 맡은 성우는 누구보다 화려하게 ZOAC를 알리려 한다.
매번 새로운 방식으로 문자열을 보여주던 성우는 이번 대회에서는 평범하게 앞 글자부터 하나씩 보여주기로 했다. 성우는 문자를 입력하기 위해 키보드로 손을 뻗은 순간, 실수로 마시던 소주를 키보드에 쏟아버리고 말았다... 알코올에 취한 키보드는 어떤 자판을 한 번만 눌러도 N번 누른 것처럼 인식을 하게 되어버렸다!
소중한 키보드를 고치기 위해 고장 접수를 하는 성우는 N을 정확하게 알아야 한다. 
눈물이 앞을 가려 모니터를 제대로 볼 수 없는 성우를 위해 대신 N을 구해주도록 하자!
첫째 줄에 성우가 고장 난 키보드로 입력한 문자열이 주어진다.
문자열의 길이는 1,000,000보다 크지 않고, 빈 문자열은 주어지지 않는다.
성우는 알파벳 대문자만 입력하고, 어떤 알파벳도 두 번 이상 입력하지 않는다.
성우는 독수리 타법이므로 한 번에 하나의 자판만 누를 수 있다.
첫째 줄에 N을 출력한다.

>>>코드

zoac = input()
print(zoac.count(zoac[0]))



10. 백준 26264 빅데이터? 정보보호!
서울사이버대학교 빅데이터·정보보호학과는 빅데이터에 관심이 있는 학생들과 정보보호에 관심이 있는 학생들이 골고루 섞여 있는 학과이다.
빅데이터·정보보호학과에서 수업을 하던 노교수는 학생들이 빅데이터와 정보보호 중 어느 분야에 더 관심이 많은지 궁금해졌다. 그래서 학생들을 만날 때마다 항상 이를 물어보고 답을 bigdata 혹은 security로 구분하여 메모장에 적어두었는데, 실수로 띄어쓰기와 개행이 전혀 없는 상태로 기록해두었다.
이대로는 학생들이 빅데이터와 정보보호 중 어느 분야에 더 관심이 많은지를 알아낼 수 없기 때문에, 당신에게 분석을 의뢰했다. 물어본 학생의 수와 답이 주어질 때, 결과를 출력하자.
첫 번째 줄에 물어본 학생의 수 N이 주어진다. (1 <= N <= 100,000)
두 번째 줄에 메모장에 적힌 답들이 한 줄의 문자열로 주어진다. 문자열은 bigdata 또는 security로만 구성되어 있으며, 띄어쓰기 등의 다른 문자가 포함되어 있지 않다.
첫 번째 줄에 정보보호 분야보다 빅데이터 분야에 관심이 있는 학생이 더 많으면 "bigdata?"를, 빅데이터 분야보다 정보보호 분야에 관심이 있는 학생이 더 많으면 "security!"를, 같으면 "bigdata? security!"를 따옴표 없이 출력한다.

>>>코드

n = int(input())
bs = input()
if bs.count('bigdata') > bs.count('security'):
    print('bigdata?')
elif bs.count('bigdata') < bs.count('security'):
    print('security!')
else:
    print('bigdata? security!')



그냥 단순한 문자열에서도 count 함수를 사용하는 것이 가능하다.

11. 백준 25904 안녕 클레오파트라 세상에서 제일가는 포테이토칩
"안녕 클레오파트라 세상에서 제일가는 포테이토칩"은 이전 사람보다 높은 목소리로 🎵 안녕 클레오파트라 세상에서 제일가는 포테이토칩🎵 을 외치는 게임이다. 
1번부터 N번까지의 사람이 원형으로 앉아서 순서대로 게임을 진행한다. 
게임을 시작하면 먼저 1번이 높이 X의 목소리로 구호를 외친다. 
다음 번호의 사람은 이전 번호의 사람이 냈던 목소리의 높이보다 1이 더 높은 목소리로 외친다. 
즉, 1번이 X, 2번이 X+1, ‎..., N번이 X+N-1 높이의 목소리로 "안녕 클레오파트라 세상에서 제일가는 포테이토칩"을 외친다. N번이 성공하면 1바퀴가 돌았으므로 다시 N번의 다음 번호인 1번으로 차례가 돌아오게 된다.
자기 차례에 내는 목소리의 높이가 자신이 낼 수 있는 목소리의 상한선보다 클 경우 게임에서 지고 벌칙으로 술을 마신다. 각 사람마다 낼 수 있는 목소리의 높이의 상한선이 주어질 때, 처음으로 술을 마시는 사람을 구하여라.
첫 번째 줄에 게임에 참여하는 사람 수 N, 1번이 처음으로 낼 목소리의 높이인 정수 X가 공백으로 구분되어 주어진다. (3 <= N <= 100; 1 <= X <= 100)
두 번째 줄에 N개의 정수 T_1, ..., T_N가 공백으로 구분되어 주어진다. 
T_i는 i번이 낼 수 있는 목소리 높이의 상한선이다. (1 <= T_{i} <= 200) 
처음으로 술을 마시는 사람의 번호를 출력한다.

>>>코드

N, X = map(int, input().split())
voice = list(map(int, input().split()))
i = -1
while True:
    i += 1
    if i == N:
        i = 0
    if voice[i]<X:
        print(i+1)
        break
    X += 1



차근차근하면 가능하다. 짧게 하는건 다른 영역이지만...

728x90
반응형

+ Recent posts