| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- vscode
- poetry
- 개발일지
- 정보처리기사실기
- 미니프로젝트
- WIL
- 백준
- 정보처리기사
- Git
- 1주차
- WHERE절
- 프로그래머스
- 알고리즘
- github
- js
- 마스킹
- re-id
- Commpot
- resnet50
- Class
- WebSocket
- 가상환경
- REDIS
- sql
- 2주차
- channels
- 파이썬
- 프로젝트
- 채팅
- 장고
Archives
- Today
- Total
개발일기
21. [백준] 별찍기 7, 붙임성 좋은 총총이 본문
1. 별찍기 7
https://www.acmicpc.net/problem/2444
2444번: 별 찍기 - 7
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
www.acmicpc.net
해결 1.
import sys
input = sys.stdin.readline
N = int(input())
# sol)
for i in range(1,N):
print(' '*(N-i) + '*'*(2*i-1))
for i in range(N,0,-1):
print(' '*(N-i) + '*'*(2*i-1))
해결 2. range(N,0,-1)을 reversed을 이용해 표현해보았다.
# sol2)
for i in range(1,N):
print(' '*(N-i) + '*'*(2*i-1))
for i in reversed(range(1,N+1)):
print(' '*(N-i) + '*'*(2*i-1))
해결 3. 재귀를 이용
재귀로 문제를 해결하기 위해서 먼저 규칙성을 찾아보았다.
# 공백 / *개수
# 4 1
# 3 3
# 2 5
# 1 7
# 0 9
# 1 7
# 2 5
# 3 3
# 4 1
이 규칙성을 이용해서 재귀로 문제를 풀었다.
def solution(n,i):
if n-i < 0:
return 0
print(' '*(n-i) + '*'*(2*i-1))
solution(n,i+1)
if n-1 != 0:
print(' '*(n-i+1) + '*'*(2*i-3))
n = int(input())
solution(n,1)
세 풀이 방식 모두 결과값은 아래와 같이 나온다.
*
***
*****
*******
*********
*******
*****
***
*
2. 붙임성 좋은 총총이
26069번: 붙임성 좋은 총총이 (acmicpc.net)
26069번: 붙임성 좋은 총총이
첫번째 줄에는 사람들이 만난 기록의 수 $N\ (1 \le N \le 1\ 000)$이 주어진다. 두번째 줄부터 $N$개의 줄에 걸쳐 사람들이 만난 기록이 주어진다. $i + 1$번째 줄에는 $i$번째로 만난 사람들의 이름 $A_i$
www.acmicpc.net
문제가 너무 귀여웟...ㅋㅋㅋ 킹받기도 하고..?ㅋㅋㅋ
어쨌든~ 총총이도 두 가지 풀이로 해결해보았다.
해결 1 - 집합 set을 이용
import sys;
input = sys.stdin.readline
danceset = {'ChongChong'}
N = int(input())
for _ in range(N):
a, b = input().split()
if a in danceset:
danceset.add(b)
elif b in danceset:
danceset.add(a)
else:
pass
print(len(danceset))
danceset에는 춤추는 사람들.. 그러니까 총총이에게 전염된 사람들이 원소인 집합이다!
둘 중 한 명이라도 춤을 추고 있다면 나머지 한 명도 danceset에 넣어주었다.
해결 2 - defaultdict 이용
import sys;
input = sys.stdin.readline
from collections import defaultdict
dance = defaultdict(bool)
# 모든 해시에 대해 디폴트 값은 False
dance['ChongChong'] = True # 총총이만 True로
answer = 1
for _ in range(int(input())):
A, B = input().split()
if dance[A]:
if not dance[B]:
dance[B] = True
answer += 1
elif dance[B]:
dance[A] = True
answer += 1
print(answer)
해결 1이 44초, 해결 2가 64초 정도 소요되며 시간복잡도는 해결 1이 더 좋다.
'오류 및 알고리즘정리본' 카테고리의 다른 글
| [Python] django.db.utils.OperationalError: no such table: 오류해결하기 (0) | 2023.06.08 |
|---|---|
| 22. [백준] 스택과 AC문제 (0) | 2023.06.01 |
| 20. [백준] 인사성 밝은 곰곰이/ 성택이의 은밀한 비밀번호/ 별찍기8 (0) | 2023.05.30 |
| 19. 백준 알고리즘 세금, 소수 찾기(에라토스테네스의 체) (0) | 2023.05.19 |
| 18. 백준 알고리즘 개, 별찍기 2 (0) | 2023.05.19 |