일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 당신이 몰랐던 진화론
- 미분적분학
- 후기
- 데이터분석전문가
- 맛집
- KMOOC
- EBS
- MySQL
- 정치학
- ADsP
- ADP
- 위대한 수업
- 백준
- Joseph Samuel Nye Jr.
- Great Minds
- CNN10
- Progate
- 누가 진정한 리더인가
- 공부정리
- 조지프 나이
- 알고리즘
- K-MOOC
- 데이터분석전문가가이드
- Baekjoon
- python
- 자료구조
- Hacker Rank
- 코테
- 빅데이터
- Udemy
- Today
- Total
ㅇ
[BAEKJOON] 6단계_심화1 본문
julia319 정보
시도했지만 맞지 못한 문제
www.acmicpc.net
2444번 별 찍기 -7
처음부터 N번째 줄까지와 N + 1번째 줄에서 2N -1번째 줄로 나누어서 진행한다. 또한 각 루프에서 공백부분, 정가운데를 중심으로 왼쪽과 오른쪽의 별이 증가하고 감소하는 부분으로 나누어 출력했다.
공백의 수를 보면, N-1개에서 1개씩 줄어들다가 0이 되고, 다시 1개씩 늘어나다가 N-1개에서 멈춘다. 별은 두 부분으로 쪼갤 수 있는데, 1개씩 늘어나다가 N개가 되고, 다시 1개씩 줄어드는 것과, 0개에서 시작해 1개씩 늘어나다가 N-1개가 되고, 다시 1개씩 줄어들어 0개가 되는 부분이 있다.
혹은 마름모의 가운데 별과 양쪽의 증식하는 별로 구분하여 표현할 수 있다. 이후 별에 곱해지는 계수들을 정리하면 아래와 같다.
N = int(input())
for i in range(1, N + 1):
print(' ' * (N - i), '*' * (i - 1), '*', '*' * (i - 1), sep = '')
for i in range(1, N):
print(' ' * (i), '*' * (N - 1 - i), '*', '*' * (N - 1 - i), sep = '')
N = int(input())
for i in range(1, N + 1):
print(' ' * (N - i), '*' * (2 * i - 1), sep = '')
for i in range(1, N):
print(' ' * (i), '*' * (2 * (N - i) - 1), sep = '')
10988번 팰린드롬인지 확인하기
좌우 끝에 포인터를 두고 비교하는 방법을 활용했다. 다만, 문자열이 1개일 때를 따로 고려해주어야 한다.
혹은 문자열을 반으로 접어 같은지 하나하나 확인하는 방법을 활용한다. 양쪽 끝에 있는 요소가 동일하면, 양쪽 끝을 잘라내서 다시 확인하는 과정을 반복한다. 만약 문자열이 짝수개였다면 마지막까지 양끝 요소를 확인하게 되고, 홀수개였다면 마지막에는 0번째나 -1번째나 자기 자신이므로, 문자열의 개수는 상관없다. 만약 둘이 다르다면 바로 팰린드롬이 아니므로 for문을 종료한다. 만약 위의 else에 들어간 적이 없다면 마지막으로 1을 배정받게 된다.
import math
S = input()
L = math.ceil(len(S) / 2)
for i in range(L):
if S[0] == S[-1]:
S = S[1:-1]
else:
ans = 0
break;
ans = 1
print(ans)
1157번 단어 공부
dictionary를 활용해 입력받은 문자열의 갯수를 정리한다. dictionary의 value 중 최댓값과 같은 value의 key값을 리스트로 저장하여 그 리스트의 길이가 1보다 커지면 ?를, 아니라면 그 리스트의 요소값을 출력한다.
S = input().upper()
alp = {}
# dict인 alp에 s라는 key가 없다면 0으로 설정 후 + 1, 있다면 그 값을 가져오고 + 1
for s in S:
alp[s] = alp.get(s, 0) + 1
# dict인 alp의 value들 모음을 list로 배정
V = list(alp.values())
# 가장 많이 사용된 알파벳들의 모음
Max = []
# 만약 dict alp의 value값이 V의 최댓값과 같다면 리스트 Max에 추가함
for k, v in alp.items():
if v == max(V):
# 만약 이미 Max에 다른 존재가 있다면, 가장 많이 사용된 알파벳이 여러 개이므로 ?가 답
if len(Max) == 1:
ans = '?'
break;
# 만약 Max의 길이가 1이라면, 가장 많이 사용된 알파벳이 1개, 그 요소가 답
Max.append(k)
ans = Max[0]
print(ans)
2941번 크로아티아 알파벳
str.replace(old, new, count) 함수를 활용하여 old에 크로아티아 알파벳을, new에 기존 알파벳과 겹치지 않는 다른 문자를 넣어 변환한다. 이때 dz=와 z=의 변환 중 전자를 먼저 수행해야 오류가 나지 않는다.
dictionary에서 key와 value를 동시에 사용하기 위해 dictionary.items()를 활용한다.
S = input()
# 크로아티아 알파벳 8개를 다음과 같이 문자열 취한 숫자와 대응한 dictionary
sep = {'c=': '0', 'c-': '1', 'dz=': '2', 'd-': '3', 'lj': '4', 'nj': '5', 's=': '6', 'z=': '7'}
# dictionary의 key와 value를 replace의 old, new에 대응하게 한다.
# 입력받은 문자열에 변환한 값을 재배정한다.
for k, v in sep.items():
S = S.replace(k, v)
# 변환이 끝난 문자열의 길이값을 반환한다.
print(len(S))
1316번 그룹 단어 체커
문제에서 문자가 연속해서 나타나는 경우만을 따진다고 했으므로, 연속하지 않게 나타나는 경우를 찾아내면 된다.
일단 입력될 모든 문자열이 그룹단어라고 가정하고, 문자열을 기준으로 for문을 돌려 이전문자와 현재문자를 비교한다. 모든 문자를 문자를 누적 저장하는 list에 추가한다. 만약 바로 이전과 동일하다면 그룹단어라고 가정하고 비교를 진행한다. 만약 이전과 다르다면 누적 저장하는 list에 존재한 적이 있는지, 이전 문자보다 앞에 나온적이 있는지 확인한다. 만약 그렇다면 그룹단어 갯수를 하나 줄이고 for문을 종료한다.
N = int(input())
# 그룹단어 갯수, 초기값: 입력횟수
cnt = N
for _ in range(N):
S = input()
# 입력값의 문자를 누적 저장할 list
alp = []
# 비교할 이전 문자, 초기값: 첫 번째 문자
tmp = S[0]
alp.append(tmp)
for s in S[1:]:
# 이전 문자와 같지 않다면
if s != tmp:
# 누적된 문자 모음 list에 존재하는지 확인
if s in alp:
# 그룹단어 갯수 1개 줄어듬
cnt -= 1
break;
# 누적 문자 모음 list에 존재 하지 않는다면, 추가해준다.
alp.append(s)
# 비교할 문자를 현재 문자로 바꾼다.
tmp = s
else:
continue
print(cnt)
25206번 너의 평점은
영문 성적에 대응하는 숫자 성적 리스트를 만들어 index를 활용하면 편리하다. 또한 평균 평점을 계산할 때, (학점 * 과목평점)의 합으로 나누므로 누적하여 더해야 한다.
# 영문 성적과 대응하는 숫자 성적
Grade_alp = ['A+', 'A0', 'B+', 'B0', 'C+', 'C0', 'D+', 'D0', 'F']
Grade_scr = [4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 0.0]
# (학점 * 과목평점) 총합
ttl_Grade = 0
# 학점 총합
ttl_Credit = 0
for _ in range(20):
# 과목, 학점, 과목평점
Subject, credit, grade = input().split()
# 만약 과목평점이 P라면 계산에 포함하지 않는다.
if grade != 'P':
# 학점을 실수로 바꾼다.
credit = float(credit)
# 영문 성적 리스트에서 과목평점에 해당하는 인덱스 값 추출
idx = Grade_alp.index(grade)
# 숫자 성적 리스트에 해당하는 값을 다시 과목평점값에 배정한다.
grade = Grade_scr[idx]
# (학점 * 과목평점) 총합에 과목에 해당하는 값을 더해준다.
ttl_Grade += (credit * grade)
# 학점 총합에 과목에 해당하는 학점을 더해준다.
ttl_Credit += credit
# 모든 과목이 종료된 뒤 과목 평점을 계산한다.
avg = round(ttl_Grade / ttl_Credit, 6)
print(avg)
'IT > 코테문제' 카테고리의 다른 글
[BAEKJOON] 7단계_ 2차원 배열 (1) | 2023.10.26 |
---|---|
[Python] 문제 풀 때 요령_231014 (0) | 2023.10.25 |
[BAEKJOON] 5단계_문자열 (0) | 2023.10.23 |
[BAEKJOON] 4단계_1차원 배열 (0) | 2023.10.20 |
[BAEKJOON] 3단계_반복문 (1) | 2023.10.19 |