반응형

8974

https://www.acmicpc.net/problem/8974

 

8974번: 희주의 수학시험

강민이 동생 희주는 올해 초등학교에 입학했다. 며칠 있으면, 생애 첫 시험을 보게 될텐데, 수학시험도 같이 본다고 한다. 희주는 겁을 먹은 나머지, 열심히 준비해야겠다고 생각했다. 이를

www.acmicpc.net

[정답]

1
2
3
4
5
6
7
8
9
10
11
12
import sys
A, B = map(int,sys.stdin.readline().split())
num = []
temp = 1
cnt = 1
for b in range(B):
    num.append(temp)
    if cnt == temp:
        temp += 1
        cnt = 0
    cnt += 1
print(sum(num[A-1:B]))
cs

 

.

.

.

[풀이]

cnt의 값을 1증가시키며 temp와 비교하고, 둘이 같아지면

temp를 1 증가시키고 cnt를 0으로 초기화시킨다.

그러면 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5,...로 num에 저장된다.

 

슬라이싱하여 sum()으로 합을 구하고 출력한다.

 

p.s.

기본적인 내용들의 짬뽕

반응형
반응형

2503

https://www.acmicpc.net/problem/2503

 

2503번: 숫자 야구

첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트

www.acmicpc.net

[정답]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import sys
ans = [True]*1000
= int(sys.stdin.readline())
cnt = 0
for n in range(N):
    num, s, b = map(int, sys.stdin.readline().split())
    num = str(num)
    for i in range(123988):
        i = str(i)
        if i[0== i[1or i[0== i[2or i[1== i[2]:
            ans[int(i)] = False
        if i[0== '0' or i[1== '0' or i[2== '0':
            ans[int(i)] = False
        s_cnt = 0
        b_cnt = 0
        for j in range(3):
            for k in range(3):
                if i[j] == num[k]:
                    if j == k:
                        s_cnt += 1
                    else:
                        b_cnt += 1
        if ans[int(i)] and s_cnt == s and b_cnt == b:
            ans[int(i)] = True
        else:
            ans[int(i)] = False
for i in range(123988):
    if ans[i]:
        cnt += 1
print(cnt)
cs

.

.

.

[풀이]

숫자 야구에선 1~9의 수를 중복하지 않고 세자리로 사용한다.

따라서 123~987에서 수의 중복, 0이 없도록 처리한다.

itertoolspermutations을 사용하여 조합된 리스트를 바로 만들 수 있지만,

기본에 충실하기 위해 직접 리스트를 짰다.

 

그 후 brute force로 for문을 이용하여 num과

숫자가 같고 인덱스도 같으면 strike 카운트,

숫자만 같으면 ball 카운트를 더해주어

입력한 s, b와 비교해준다.

 

값이 True인 애들의 수를 계산하여 출력한다.

 

p.s.

좀 지능적으로 계산하는 방법이 없을까 고민했지만

결국 일일이 계산하는 브루트포스로 해결했다.

좀 아쉽다.

반응형
반응형

11004

https://www.acmicpc.net/problem/11004

 

11004번: K번째 수

수 N개 A1, A2, ..., AN이 주어진다. A를 오름차순 정렬했을 때, 앞에서부터 K번째 있는 수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

[정답]

1
2
3
4
5
import sys
N, K = map(int, sys.stdin.readline().split())
= list(map(int, sys.stdin.readline().split()))
a.sort()
print(a[K-1])
cs

 

.

.

.

[풀이]

오름차순으로 정렬하기 위해 sort() 또는 sorted()를 쓴다.

1
a.sort()
cs

sort()를 쓸 경우, 기존 리스트가 정렬된다.

1
= sorted(a)
cs

sorted()의 경우 기존 리스트는 그대로 두고, 새 리스트가 반환되기 때문에

반환값을 따로 받아준다.

정말 초보적인 문제다.

반응형
반응형

9613

https://www.acmicpc.net/problem/9613

 

9613번: GCD 합

첫째 줄에 테스트 케이스의 개수 t (1 ≤ t ≤ 100)이 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있다. 각 테스트 케이스는 수의 개수 n (1 < n ≤ 100)가 주어지고, 다음에는 n개의 수가 주어진

www.acmicpc.net

[정답]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import sys
def gcd(a, b):
    if a % b == 0:
        return b
    else:
        return gcd(b, a%b)
= int(sys.stdin.readline())
for t in range(T):
    cnt = 0
    a = list(map(int, sys.stdin.readline().split()))
    for i in range(1, a[0]):
        for j in range(i+1, a[0]+1):
            cnt += gcd(a[i], a[j])
    print(cnt)
cs

.

.

.

[풀이]

유클리드 호제법을 이용하는 간단한 문제.

유클리드 호제법은 간단히 말해서 두 수의 나머지를 이용하여

최대 공약수를 찾아나가는 방법이다. 수학적인 내용은 여기서는 스킵.

1
2
3
4
5
def gcd(a, b):
    if a % b == 0:
        return b
    else:
        return gcd(b, a%b)
cs

최대공약수 (GCD)를 찾을 때 매우 유용한 방식이니 꼭 기억하도록 하자.

 

두 수를 짝지어 주는 방식은 이중 for문으로 해결한다.

짝 지은 녀석들을 gcd함수에 넣고 출력값들을 더해주면 된다.

반응형
반응형

11091

https://www.acmicpc.net/problem/11091

 

11091번: 알파벳 전부 쓰기

팬그램은 26개의 알파벳, a~z를 최소 한번씩 모두 사용한 문장을 말한다. 아마 가장 유명한 문장은 이것일 것이다. "The quick brown fox jumps over the lazy dog." 꿍은 다른 문장들중에 팬그램인 것은 없는지

www.acmicpc.net

[정답]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import sys
= int(input())
for n in range(N):
    eng = [0]*26
    s = sys.stdin.readline().strip()
    s = s.lower()
    cnt = 0
    for i in s:
        check = ord(i) - 97
        if 0 <= check <= 25:
            eng[check] = 1
    for i in eng:
        if i:
            cnt += 1
    if cnt == 26:
        print('pangram')
    else:
        print('missing ', end = '')
        for i in range(26):
            if eng[i] == 0:
                print(chr(i+97), end = '')
        print()
cs

.

.

.

[풀이]

입력 받은 문장을 lower()을 이용하여 소문자로 바꿔준다.

아스키코드를 이용하여 a(97) ~ z(122)에 해당하는 알파벳이 있는지 확인한다.

ord('a') → 97         chr(97) → a

ord('z') → 122        chr(122) → z

 

P.S.

코드가 길어서 지저분해보인다.

반응형
반응형

11719

https://www.acmicpc.net/problem/11719

 

11719번: 그대로 출력하기 2

입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄이 주어질 수도 있고, 각 줄의 앞 뒤에 공백이

www.acmicpc.net

[정답1]

1
2
import sys
print(sys.stdin.read())
cs

.

.

.

[정답2]

1
2
3
4
5
while True:
    try:
        print(input())
    except EOFError:
        break
cs

.

.

.

[풀이]

입력이 계속 주어지다 EOF (End Of File)에 도달하면 프로그램이 중단된다.

 

[정답1]의 sys.stdin.read()는 EOF 전까지 여러줄을 문자열로 입력받는다.

따라서 별도의 조건 없이 한줄로 해결 가능하다.

 

[정답2]에서는 while 반복문을 이용하여 EOF일때 break하여 종료한다.

try except로 EOF Error 상황에서 반복문을 탈출한다.

 

P.S.

sys 사용법을 완벽히 이해하지 못했다. 조만간 정리해보자.

반응형
반응형

2755

https://www.acmicpc.net/problem/2755

 

2755번: 이번학기 평점은 몇점?

첫째 줄에, 백준이가 이번 학기에 들은 과목 수가 주어진다. 둘째 줄부터 N개의 줄에 각 과목의 과목명, 학점, 성적이 주어진다. 과목명은 알파벳 소문자와 숫자, 그리고 밑줄 (_)로만 이루어져 있

www.acmicpc.net

[정답]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import sys
def new_round(n):
    n *= 100
    return (int(n)+1)/100 if (n - int(n)) >= 0.5 else int(n)/100
= int(sys.stdin.readline())
total = 0
cnt = 0
grade = {'A+':4.3'A0':4.0'A-':3.7'B+':3.3'B0':3.0'B-':2.7
'C+':2.3'C0':2.0'C-':1.7'D+':1.3'D0':1.0'D-':0.7'F':0.0}
for n in range(N):
    x, y, z = sys.stdin.readline().strip().split()
    total += int(y) * grade[z]
    cnt += int(y)
print('{0:.2f}'.format(new_round(total/cnt)))
cs

.

.

.

[풀이]

딕셔너리를 이용하여 값들을 정리해준다.

입력받은 값들 중 학점과 성적만 건져서 계산해준다.

 

파이썬에 내장되어 있는 반올림 함수, round()는 일상에서 쓰는 반올림과 차이가 있다.

소수점 첫째자리에서 반올림할 때,

소수점 첫째자리가 0.5라면 앞자리의 짝홀에 따라 반올림이 달라진다.

예) 1.5 → 2 - - - - - - - - - -(홀) (올림)

       2.5 → 2 - - - - - - - - - -(짝) (버림)

       3.5 → 4 - - - - - - - - - -(홀) (올림)

따라서 new_round() 라는 함수를 만들어줬다.

 

결과를 출력할 때는 소수점 2자리까지 표현하기 위해서 format을 이용해준다.

print('{인덱스: .소수점자리 f}'. format(값))

 

간단한 문제이나, 세세한 부분을 무시하면 오류가 날 수 있다.

반응형
반응형

9625

https://www.acmicpc.net/problem/9625

 

9625번: BABBA

상근이는 길을 걷다가 신기한 기계를 발견했다. 기계는 매우 매우 큰 화면과 버튼 하나로 이루어져 있다. 기계를 발견했을 때, 화면에는 A만 표시되어져 있었다. 버튼을 누르니 글자가 B로 변했

www.acmicpc.net

[정답]

1
2
3
4
5
6
7
8
= int(input())
= 1
= 0
for k in range(K):
    temp = a
    a = b
    b += temp
print(a, b)
cs

 

.

.

.

[풀이]

k번째 a의 개수 = k-1번째의 b개수

k번째 b의 개수 = k-1번째의 a개수 + k-1번째의 b개수

간단하다.

.

.

처음에 dynamic programming, 동적계획법을 복습해보려고 코드를 짜봤으나 런타임에러가 떴다.

간단한 문제는 간단하게 풀자.

반응형

+ Recent posts