[5622] 다이얼

해결 포인트

나는 좀 멍청하게 풀었다....

답안 올리기가 너무 창피할 정도이다....

다른 사람들은 나보다 더 잘풀것이라 생각한다.

답안

a = input()
cnt = 0
for i in a:
    if i == 'A' or i == 'B' or i == 'C':
        cnt += 3
    elif i == 'D' or i == 'E' or i == 'F':
        cnt += 4
    elif i == 'G' or i == 'H' or i == 'I':
        cnt += 5
    elif i == 'J' or i == 'K' or i == 'L':
        cnt += 6
    elif i == 'M' or i == 'N' or i == 'O':
        cnt += 7
    elif i == 'P' or i == 'Q' or i == 'R' or i == 'S':
        cnt += 8
    elif i == 'T' or i == 'U' or i == 'V':
        cnt += 9
    elif i == 'W' or i == 'X' or i == 'Y' or i == 'Z':
        cnt += 10
print(cnt)

[2941] 크로아티아 알파벳

해결 포인트

변경 문자들을 한 변수에 전부 저장한다음 in 을 통해 테크하고 해당 인덱스를 특정 기호로 변경하여 len으로 길이를 구했다. 사용한 함수는 in, len, replace 3가지이다. 

답안

a = input()
b = ['c=','c-','dz=','d-','lj','nj','s=','z=']
for i in b:
    if i in a:
        a = a.replace(i,"1")
print(len(a))

[1316] 그룹 단어 체키

해결 포인트

n번째 인덱스와 n+1번째 인덱스를 비교하여 [ : : ] 및 in을 이용해 확인하였다. 

답안

a = int(input())
sum = a
for k in range(a):
    b = input()
    for i in range(len(b)-1):
        if b[i] == b[i+1]:
            pass
        elif b[i] in b[i+1:]:
            sum -= 1
            break
print(sum)

[1157] 단어 공부

해결 포인트

입력받자마자 upper을 통해 전부 대문자로 변경해준다.

set을 통해 중복값을 제거하고 list화 시킨다.

중복값을 가지고 입력받은 데이터와 비교하고 count를 통해 카운트한다.

이를가지고 비교하면 끝

답안

a = input().upper()
a_s = list(set(a))
x = 0
w = ''
if len(a) < 2:
    print(a)
else:
    for i in a_s:
        cnt = a.count(i)
        if x < cnt:
            x = cnt
            w = i
        elif x == cnt:
            w = '?'
print(w)

 

 

점점 어려워진다.

문제를 접할수록 아직 내가 문법이 부족하다는것을 많이 느낀다.

 

[1065] 한수

해결 포인트

한자릿수 두자릿수 모든 숫자는 등차수열이다.

이를 먼저 조건을 건다음 인덱스 0,1 과 2,3을 비교하여 카운트 해보자

답안

import sys
x = int(sys.stdin.readline())
cnt = 0
for i in range(1,x+1):
    if i < 100:
        cnt += 1
    else:
        b = list(map(int,str(i)))
        if b[1] - b[0] == b[2] - b[1]:
            cnt += 1
print(cnt)

1 ~ 입력받은수까지가 문제에서 요구하는 범위이다.

각 요소를 숫자형으로 변경하여 리스트를 만들어 비교하면 된다.

 

[11654] 아스키 코드

해결 포인트

ord()를 사용하면 쉽게 풀이 가능하다.

답안

print(ord(input()))

[11720] 숫자의 합

해결 포인트

그냥 쉽다....

답안

a = int(input())
b = input()
sum = 0
for i in b:
    sum += int(i)
print(sum)

 

[10809] 알파벳 찾기

해결 포인트

변수 두개

하나는 입력받고

하나는 알파벳을 저장하여 a in b 를 이용하여 찾고 해당 인덱스를 출력하면 된다.

답안

from operator import index
a = input()
b = 'abcdefghijklmnopqrstuvwxyz'
for i in b:
    if i not in a:
        print(-1,end=" ")
    else:
        print(a.index(i),end=" ")

 

[2675] 문자열 반복

해결 포인트

공백으로 구분되어 입력받은뒤 입력받은 수 만큼 인덱스 하나하나 반복하여 출력하면 된다.

답안

a = int(input())
sum = ""
for i in range(a):
    b, c = input().split()
    for j in range(len(c)):
        sum += c[j]*int(b)
    print(sum)
    sum = ""

 

[1152] 단어의 개수

해결 포인트

공백으로 단어를 입력받고 len()을 이용하면 끝이다.

답안

a = input().split()
print(len(a))

 

[2908] 상수

해결 포인트

[::-1] 을 이용하면 문자열을 반대로 구성할 수 있다.

답안

a,b = input().split()
a = a[::-1]
b = b[::-1]
if a<b:
    print(b)
else:
    print(a)

 

이제 어느정도 감이 잡혔다.

기초적인 문법들..

매번 문제를 풀어볼떄마다 코드를 다 지우고 처음부터 작성하니 금방 익숙해진것같다.

 

이제 다음 부터는 함수를 공부하려고 한다.

[15552]  빠른 A+B

그렇다 뭔지 모르겠지만 시키는대로 readline을 사용해보자

해결 포인트

변수 b는 split으로 구분으려 str로 받았다.

덧셈할때는 int형으로 변환하여 해줬다.

map으로 두개를 받아서 해도된다.
뭐 아직 코린이니까... 어떤방식으로든 풀면 된다고 생각한다.

답안

import sys
a = int(sys.stdin.readline())
for i in range(a):
    b = sys.stdin.readline().split()
    print(int(b[0])+int(b[1]))

 

[11021]  A+B - 7

해결 포인트

이 문제는 이전 문제와 매우 흡사하다.

이번에는 map을 이용하여 값을 받았다.

답안

t = int(sys.stdin.readline())
for i in range(t):
    a, b = map(int, sys.stdin.readline().split())
    print("Case #{}: {}".format(i+1,a+b))

[11022]  A+B - 8

해결 포인트

이전 문제와 거의 똑같다 출력문만 조금 바뀌었다.

답안

import sys
t = int(sys.stdin.readline())
for i in range(t):
    a,b = map(int,sys.stdin.readline().split())
    print("Case #{}: {} + {} = {}".format(i+1,a,b,a+b))

 

[2438]  별 찍기 - 1

해결 포인트

코린이는 어려울 것이다...

for문의 로직을 정확하게 파악한다면 비교적 손쉽게 가능하다.

답안

import sys
L = int(sys.stdin.readline())
for i in range(L):
    print("*"*(i+1))

 

[2439]  별 찍기 - 2

해결 포인트

이전 문제와 비슷하지만 더 어렵다.

공백을 출력하는것을 고려해보라

답안

import sys
L = int(sys.stdin.readline())
for i in range(L):
    print(" "*(L-(i+1)) + "*"*(i+1))

 

[10871]  X보다 작은 수

해결 포인트

쏘 이지..

답안

import sys
n,x = map(int, sys.stdin.readline().split())
a = sys.stdin.readline().split()
for i in range(n):
    if int(a[i]) < x:
        print(a[i])

 

[10952]  A+B - 5

해결 포인트

입력받는 값이 0 0 일때는 break 해야한다.

이점 고려하여 풀어보자

답안

import sys
while True:
    a,b = map(int, sys.stdin.readline().split())
    if a==0 and b==0:
        break
    else:
        print(a+b)

10951 A+B - 4

 

[10951]  A+B - 4

해결 포인트

try를 사용해보자.

답안

from ast import Try
import sys
while True:
    try:
        a,b = map(int, sys.stdin.readline().split())
        print(a+b)
    except:
        break

[1110]  더하기 사이클

해결 포인트

어려웠다...

한줄 한줄 구현하는것을 권한다.

우선적으로 고려해야할 점은 입력받은 값이 한자리인지 두자리인지 이다.

본인은 숫자형이 아닌 문자형으로 인식하여 중간중간 숫자형으로 변환하여 코드를 짰다.

방법이야 여러가지겠지만 일단 답만 내면 장땡아니겠는가...

답안

a = input()
count = 0
if len(a) < 2:
    a = a + str(0)
    b = a
else:
    b = a 
while True:
    try:
        sum = str(int(a[-1])+int(a[-2]))
        a = a[-1] + sum[-1]
        count += 1
        if a == b:
            print(count)
            break
    except:
        break

 

태풍이 가고 날씨가 너무 화창하다.

바람은 많이 불지만 아직 햇빛은 너무나 덥다~

 

어제에 이어 리스트 + 반복문 뿌시기다. 이번 문제중 4344번이 진짜 너무나도 오래걸렸다...

벌써부터 막히면 안되는데..

[4344] 평균은 넘겠지

해결 포인트

테스트 케이스를 받아 그 수만큼 점수를 받아야한다.

그리고 받은 데이터 인덱스 0은 학생의 수 이며 이후는 각 학생의 점수를 받는다.

그렇게 첫번째 리스트가 완성되면 인덱스 0(학생수) 를 제외하고 더한값을 변수에 저장하고 인덱스 0(학생수)로 나누어 평균값을 변수에 저장한다.

평균값과 각 학생 점수를 비교하여 카운트하여 평균을 넘는 학생수를 구하고 전체 학생수를 이용해 비율을 구한다.

답안

a = int(input())
b = []
result = []
for i in range(a):
    b.append(list(map(int, input().split())))
    sum = 0
    avg = 0
    count = 0
    for j in range(len(b[i])-1):
        sum = sum + b[i][j+1]
        avg = sum / b[i][0]
    for n in range(len(b[i])-1):
        if avg < b[i][n+1]:
            count = count + 1
    result.append(count/b[i][0]*100)
for m in range(len(result)):
    print('%.3f'%(result[m])+'%')

[2739] 구구단

해결 포인트

for문을 사용하면 0부터 시작한다는것을 인지하고 작성해보자

답안

a = int(input())
for i in range(9):
    print("{} * {} = {}".format(a, i+1, a*(1+i)))

[10950]  A+B -3

해결 포인트

처음에 입력받는 수 만큼 이후 값들을 입력받아야한다.

답안 

a = int(input())
for i in range(a):
    x,y = input().split()
    print(int(x)+int(y))

[8393] 합

해결 포인트

이전 구구단 문제와 같이 for문 사용시 0부터 시작한다는 점을 고려하여 작성하면 된다.

답안

a = int(input())
sum = 0
for i in range(a):
    sum = sum + (i+1)
print(sum)

[25304} 영수증

해결 포인트

두번째로 받는 물건 종류 수대로 아래 각 물건 가격과 개수를 받고

받은 가격과 개수를 곱해 변수에 저장한다.

각각의 물건 총 값을 더해 기존 입력 받은 총금액과 일치하는지 알아보면된다.

답안

sum = int(input())
sum2 = 0
a = int(input())
for i in range(a):
    x,y = input().split()
    sum2 = sum2 + (int(x)*int(y))
if sum == sum2:
    print("Yes")
else:
    print("No")

태풍이 올라오고 있어 비와 바람이 많은 날씨이다.

우산을 들고 터벅터벅 걸어 카페에 도착했다.

아무고토 하고싶지않지만 그럴 수 없기에 시작했다..

 

개발 코드에 빠지지 않는 것 중 가장 비중이 큰거같다고 개인적으로 생각한다.

1차원을 넘어 다중으로 사용하게 되면 머리가 너무 아플것같다.

 

리스트 요소 추가

a = [1, 2, 3, 4]
a.append(5)
print(a) # [1, 2, 3, 4, 5]
a.insert(0, 6)
print(a) # [6, 1, 2, 3, 4, 5]
a.extend([10,11,12,13])
print(a) # [6, 1, 2, 3, 4, 5, 10, 11, 12, 13]

append = 리스트 맨뒤에 값을 추가하는것이다.

insert(x, y) = 인덱스 x 에 y 값을 추가하는것이다.

extend = 리스트 맨뒤에 더하는것이다. (더하기 연산자를 이용하여 리스트를 더할 수 도있다. 이는 비파괴적으로 동작한다.) 

위 코드 출력문을 확인해보라.

 

 

리스트 요소 제거

a = [1, 2, 3, 4]
del a[0]
print(a) # [2, 3, 4]
a.pop(0)
print(a) # [3, 4]
a.remove(4)
print(a) # [3]
a.clear()
print(a) # []

del [x] = 인덱스 x에 있는 요소를 지운다.

pop(x) = 인덱스 x에 있는 요소를 지운다.

remove(x) = 요소(x)를 제거한다.

clear = 모든 요소 제거

위 코드 출력문을 확인해보라.

 

 

요소 정렬

a = [100,1,40,20,5,101,42]
a.sort()
print(a) # [1, 5, 20, 40, 42, 100, 101]
a.sort(reverse=True)
print(a) # [101, 100, 42, 40, 20, 5, 1]

sort() = 요소들을 오름차순으로 정렬

sort(reverse=True) = 요소들을 내림차순으로 정렬

 

 

요소 존재 확인

a = [1,40,20,5]
print(40 in a) # True
print(4 in a) # False
print(4 not in a) # True

 

백준 1차원 배열 문제를 풀어보자

 

[10818]  최소, 최대

해결 포인트

리스트를 받고 소트로 정렬한 다음 첫 인덱스와 끝인덱스를 출력하면 된다.

답안

a = int(input())
b = list(map(int,input().split()))
b.sort()
print(b[0],b[-1])

 

 

[2562]  최댓값

해결 포인트

리스트를 만들어 append를 이용하여 9번 받고 max를 이용하여 최댓값 출력과 해당 인덱스를 알아내고 +1 시킨다.

이전 문제에선 최댓값을 소트하여 출력했지만 보다 간단한 max를 사용했다.

 

답안

a = []
for i in range(9):
    a.append(input())
print(max(a))
print(a.index(max(a))+1)

 

 

[3052] 나머지

해결 포인트

반복문을 사용하여 리스트 a에 10개의 자연수를 넣고 이와 동시에 리스트 b에는 42를 나눈값을 넣어준다.

여기까지는 수월하게 진행했다. 그러나... 두개의 리스트를 비교하는것에 좀 막혔다..

다중 포문으로 하나하나 비교하는것으로 짜봤지만 쉽지않았다...

리스트 비교 관련 함수를 찾던중 set() 이란것을 찾았고 이를 활용해 보았다.
set()함수는 리스트내 중복된 값을 찾아 없애고 나머지를 집합으로 만들어 준다.
set()을 적용해주고 len를 이용해 갯수를 카운트 해줬다.

 

답안

a = []
b = []
for i in range(10):
    a.append(input())
    b.append(int(a[i])%42)
print(len(set(b)))

 

[1546] 평균

 

해결 포인트

리스트 m을 받고 이중 최댓값을 변수 a에 저장한다.

반복문을 이용해 리스트 m 길이 만큼

i 값을 이용해 리스트 각 요소에 점수/a*100을 한 값을 넣어준다.

평균을 구하기 위해 변수 z에 더해준뒤
마지막 출력문때 리스트 길이만큼 나눠준다.

 

답안

n = int(input())
m = list(map(int,input().split()))
a = max(m)
z = 0
for i in range(n):
    m[i] = (m[i]/a)*100
    z = z+m[i]
print(z/len(m))

 

[8958] OX퀴즈

 

해결 포인트

진짜... 어려웠다.. 머리가 너무 복잡했다.
다중 포문을 사용한점.. 각 포문의 라인별 출력을 확인하여 로직을 파악하여 짰으며

점수를 더하고 초기화 하는 로직을 어느 라인에서 구동시킬지 많은 고민과 시간이 소요됬다.

첫 줄에 입력받는 수만큼 OX를 입력받게 포문을 사용하였다.
리스트에는 이중으로 데이터가 입력돠었으며
본 로직의 OX 구별 또한 [][] 이중 리스트를 사용하여 구분하였다.

이중 리스트인만큼 포문도 이중으로 사용하였다....

반복문이 아직 익숙지 않은 분들은 각 라인별로 print를 통해 데이터의 흐름을 파악해보는것도 좋다.

참고할만한 좋은 사이트 하나 소개한다.

Python Tutor: Learn Python, JavaScript, C, C++, and Java by visualizing code 

 

Python Tutor: Learn Python, JavaScript, C, C++, and Java by visualizing code

Learn Python, JavaScript, C, C++, and Java This coding tutor tool helps you learn Python, JavaScript, C, C++, and Java by visualizing code execution. You can use it to debug your homework assignments and as a supplement to online coding tutorials. Related

pythontutor.com

해당 사이트에 코드를 입력하면 스탭별로 로직 흐름을 알 수 있다.
오래걸리더라도 꼭해보길 권한다.

답안

a = int(input())
b = []
count = 0
sum = 0
for i in range(a):
    s = input()
    b.append(s)
for j in range(len(b)):
    for n in range(len(b[j])):
        if b[j][n] == "O":
            count += 1
            sum += count 
        elif b[j][n] == "X":
            count = 0
    count = 0
    print(sum)
    sum = 0

카페가 태풍땜에 정신이 없어 일찍닫는다...
얼른 마무리하고 집가야겠다!

반복문을 들어가기엔 하루 일정이 타이트하여

출력문 문제들을 풀어봤다.
역시나 쉬웠다..

정답률이 의심갈정도이다.

 

문제중 2588번을 좀 고민하게됬는데 한번 리뷰하도록 하겠다.

 

[2588] 곱셈

해결포인트

(3) 472 x 5

(4) 472 x 8

(5) 472 x 3
인데,,, 5 8 3 각각 어떻게 값을 줄지 생각보보았다. 이미 int(input())을 통해 숫자로 받은 상황이였다.

그렇담 수학적으로 계산하여 1의 자리 10의 자리 100의 자리 각각 구하는 수밖엔 없지만

너무나도 식이 복잡해질것이다.

그렇다면,,, 단순하게 문자로 생각하면 어떨까?

1은 숫자로 형변환 하고 2는 형변환 하지 않고 문자 그자체로 생각했다.

그렇다면 0,1,2에 각각 3,8,5가 들어가게되고 [0], [1], [2] 로 불러올수있다.

다른 표현법으로는 [-1]은 맨뒷자리를 나타내고 [-2]는 맨뒤에서 두번째이다. 이를통해

3 = [-3]

8 = [-2]

5 = [-1]

로 하여 생각해보자. 

답안

A = int(input())
B = input()
print(A*int(B[-1])) //B[2]
print(A*int(B[-2])) //B[1] 
print(A*int(B[-3])) //B[0]
print(A*int(B))

 

+ Recent posts