728x90
반응형

처음에 첫 번째 반복문에서 s1, s2 순서를 반대로 해서 틀렸었다. 

아무리 봐도 맞는 것 같았는데 틀려서 짜증 났는데 순서를 바꾸니 바로 해결됐다. 

s1, s2 = map(str, input().split())

for i in range(len(s1)):
    if s1[i] in s2:
        col = i
        row = s2.index(s1[i])
        break
    
for i in range(len(s2)):
    if i == row:
        print(s1)
    else:
        print('.'*col + s2[i] + '.'*(len(s1)-col-1))
728x90
반응형
728x90
반응형

입력으로 알파벳 하나와 문장이 들어오는데, 문장 안에 주어진 알파벳(소문자, 대문자)이 총 몇 개 들어있는지 구하면 되는 문제다.

lower, upper, count 메서드를 사용해서 쉽게 풀었다.  

while 42:
    t = input()
    if t == '#':
        break
    li = t.split()
    alpha_upper = li[0].upper()
    alpha_lower = li[0].lower()
    s = " ".join(li[1:])
    cnt = s.count(alpha_upper) + s.count(alpha_lower)
    print("{0} {1}".format(alpha_lower, cnt))
728x90
반응형
728x90
반응형

수학, 국어 숙제를 다 풀기 위한 최대 일수를 방학 총 일수에서 빼주면 된다.

L = int(input())
A = int(input())
B = int(input())
C = int(input())
D = int(input())

cnt = 0
while (A > 0 or B > 0):
    cnt += 1
    A -= C
    B -= D
    
ans = L - cnt
print(ans)
728x90
반응형
728x90
반응형

이런 DP 비슷한 문제들은 아직 어색해서 푸는데 오래 걸렸다.

변을 공유하는 현재 스티커를 고른다면 위 혹은 밑, 양옆의 스티커는 포기해야 하는데,

이전 대각선과 전전 대각선의 값을 현재 값과 각각 더해 비교하여 큰 값을 취하는 방식으로 문제를 풀었다.

for _ in range(int(input())):
    n = int(input())
    
    li = []
    for _ in range(2):
        li.append(list(map(int, input().split())))
    
    li[0][1] += li[1][0]
    li[1][1] += li[0][0]
    
    for j in range(2, n):
        li[0][j] += max(li[1][j - 1], li[1][j - 2])
        li[1][j] += max(li[0][j - 1], li[0][j - 2])
    
    ans = max(li[0][n - 1], li[1][n - 1])
    print(ans)
728x90
반응형
728x90
반응형

그 유명한 에라토스테네스의 체 문제이다. 

에라토스네테스의 체를 사용해 소수 리스트를 만들 때 K(입력) 번째 지우는 수를 구해야 하는 문제이다. 

소수 리스트를 생성하는 과정에서 변수(cnt) 하나만 추가해주면 된다.

N, K = map(int, input().split())  
cnt = 0  
nums = [True] * (N+1)  
for i in range(2, N+2):  
    for j in range(i, N+1, i):  
        if nums[j] == True:  
            nums[j] = False  
            cnt = cnt + 1  
            if cnt == K:  
                print(j)  
                break
728x90
반응형
728x90
반응형

수열이 등차인지 등비인지는 맨 처음 3개의 숫자들만 보면 알 수 있다. 

두 번째 숫자 - 첫 번째 숫자 = 세 번째 숫자 - 두 번째 숫자 -> 등차수열 

두 번째 숫자 / 첫 번째 숫자 = 세 번째 숫자 / 두 번째 숫자 -> 등비수열

이 점을 이용해서 등차라면 마지막 숫자에 li[1]-li[0] 만큼 더하고,

등비수열이라면 마지막 숫자에 li[1]//li[0] 만큼 곱해주면 된다.  

li = []
for _ in range(int(input())):
    li.append(int(input()))
    
ans = li[-1]
if li[2]-li[1] == li[1]-li[0]:
    ans += (li[1]-li[0])
elif li[2]//li[1] == li[1]//li[0]:
    ans *= (li[1]//li[0])

print(ans)
728x90
반응형
728x90
반응형

단순한 계산 문제이다.

A = int(input())
B = int(input())

print(A+B)
print(A-B)
print(A*B)
728x90
반응형
728x90
반응형

조금 특이한 별 찍기 문제이다. 조건에 맞게 막일을 해주자.

n = int(input())

s1, s2 = '', ''
for i in range(n):
    if i%2:
        s1 += ' '
        s2 += '*'
    else:
        s1 += '*'
        s2 += ' '

for i in range(n):
    print(s1+'\n'+s2)
728x90
반응형
728x90
반응형

간단한 별 찍기 문제이다. n을 입력값이라고 하자.

첫 번째 반복문은 *을 2*n-1개부터 3개까지 출력하고 두 번째 반복문은 *을 1개부터 2*n-1개까지 출력해준다.

EX) n = 3

첫 번째 반복문 결과: 

*****

 ***

두 번째 반복문 결과:

  *

 ***

*****

n = int(input())

for i in range(0, n-1):
    print(' '*i + '*'*(2*(n-i)-1))
for i in range(n-1, -1, -1):
    print(' '*i + '*'*(2*(n-i)-1))
728x90
반응형
728x90
반응형

간단한 별 찍기 문제이다. n을 입력값이라고 하자.

첫 번째 반복문은 *을 1개부터 n-1개까지 출력하고 두 번째 반복문은 *을 n개부터 1개까지 출력해준다.

EX) n = 3

첫 번째 반복문 결과: 

*

두 번째 반복문 결과:

**

*

n = int(input())

for i in range(1, n):
    print('*'*i)
for i in range(n, 0, -1):
    print('*'*i)
728x90
반응형
728x90
반응형

x, y 둘 다 양수이면 1 사분면, x가 음수, y가 양수면 2 사분면

x, y 둘 다 음수이면 3 사분면, x가 양수, y가 음수면 4 사분면이다.

단순하게 조건문 4개를 써서 풀었다.

x = int(input())
y = int(input())

if x*y > 0 and x > 0:
    print(1)
elif x*y < 0 and x < 0:
    print(2)
elif x*y > 0 and x < 0:
    print(3)
else:
    print(4)
728x90
반응형
728x90
반응형

제일 싼 버거 값(1~3번째 입력 중 최솟값)과 음료값(4~5번째 입력 중 최솟값)의 합에 50을 빼준 값을 출력하면 된다.

buger = []
drink = []
for _ in range(3):
    buger.append(int(input()))
for _ in range(2):
    drink.append(int(input()))
    
ans = min(buger) + min(drink) - 50
print(ans)
728x90
반응형
728x90
반응형

우선 입력(2×1짜리 타일과 2×2짜리 타일)을 각각 리스트에 저장하고 내림차순 정렬한다.

N이 짝수일 경우)

2×1짜리 타일 중 제일 예쁜 타일과 2×2짜리 타일 중 제일 예쁜 타일 2개의 합을 비교하고 더 큰 쪽을 사용하고 pop 한다. 그 후 앞의 과정을 끝까지 반복하면 된다.

N이 홀수일 경우)

2×1짜리 타일 하나는 무조건 사용해야 하므로 2×1짜리 타일 중 제일 예쁜 타일을 사용하고 pop 한다. 이후는 N이 짝수인 경우와 같다.

n, a, b = map(int, input().split()) 
li1 = sorted(list(map(int, input().split()))) 
li2 = sorted(list(map(int, input().split())))    
ans = 0 

if n % 2 == 1: 
    ans += li1[-1] 
    li1.pop(-1) 
    n -= 1 
     
for _ in range(0, n, 2): 
    t1, t2 = 0, 0 
    if len(li1) >= 2: 
        t1 = li1[-1] + li1[-2] 
    if len(li2) >= 1: 
        t2 = li2[-1] 
         
    if t1 > t2: 
        ans += t1 
        li1.pop(); li1.pop() 
    else: 
        ans += t2 
        li2.pop() 

print(ans)
728x90
반응형
728x90
반응형

입력이 대문자인 경우 shift를 추가로 눌러줘야 되므로 대문자의 개수(cnt_other)를 세주고, 왼손과 오른손 영역에 속하는 알파벳의 개수(cnt_left, cnt_right)도 각각 세준다.

그 후 cnt_other를 cnt_left와 cnt_right의 차이가 최대한 줄어들도록 골고루 나눠주면 된다. 

EX) 입력이 Hello World인 경우

cnt_other = 3, cnt_left = 4, cnt_right = 6

-> cnt_left = 4 + 3 = 7, cnt_right = 6

S = input() 
li_left = 'qwertyasdfgzxcvb' 
li_right = 'uiophjklnm' 
cnt_left, cnt_right, cnt_other = 0, 0, 0 

for i in S: 
    if i.isupper(): 
        cnt_other += 1 
         
for i in S.lower(): 
    if i in li_right: 
        cnt_right += 1 
    elif i in li_left: 
        cnt_left += 1 
    else: 
        cnt_other += 1 

while cnt_other != 0: 
    if cnt_left <= cnt_right: 
        cnt_left += 1 
    else: 
        cnt_right += 1 
    cnt_other -= 1 
     
print(cnt_left, cnt_right)
728x90
반응형
728x90
반응형

1, 2회 코드 페스티벌의 상금이 담겨있는 리스트를 직접 생성하는 방식으로 무식하게 풀었다.

li1 = [5000000] + [3000000]*2 + [2000000]*3 + [500000]*4 + [300000]*5 + [100000]*6 + [0]*79
li2 = [5120000] + [2560000]*2 + [1280000]*4 + [640000]*8 + [320000]*16 + [0]*33
for _ in range(int(input())):
    n1, n2 = map(int, input().split())
    print(li1[n1-1] + li2[n2-1])

728x90
반응형

+ Recent posts