| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 프로그래머스
- 마스킹
- 채팅
- 가상환경
- 개발일지
- 정보처리기사실기
- 백준
- js
- 미니프로젝트
- 2주차
- poetry
- 장고
- 프로젝트
- re-id
- vscode
- WIL
- WebSocket
- REDIS
- channels
- Git
- github
- Class
- sql
- Commpot
- 정보처리기사
- WHERE절
- 1주차
- resnet50
- 알고리즘
- 파이썬
- Today
- Total
개발일기
20. [백준] 인사성 밝은 곰곰이/ 성택이의 은밀한 비밀번호/ 별찍기8 본문
1. 인사성 밝은 곰곰이 : 집합으로 풀었다!
25192번: 인사성 밝은 곰곰이 (acmicpc.net)
25192번: 인사성 밝은 곰곰이
첫번째 새로운 사람이 들어온 뒤 pjshwa, chansol, chogahui05은 모두 곰곰티콘으로 인사했다. 두번째 새로운 사람이 들어온 뒤 pjshwa와 chansol은 다시 곰곰티콘으로 인사했다.
www.acmicpc.net
집합은 서로 다른 원소들의 모임이므로, 집합의 성질을 이용하여 이 문제를 풀었다,
해결 1
import sys
input = sys.stdin.readline
N= int(input())
cnt = 0
inputset = set()
for _ in range(N):
word = input()[:-1]
# print(word =='ENTER') # True 나옴
if word != 'ENTER':
if word not in inputset:
cnt += 1
inputset.add(word)
else:
inputset.clear()
print(cnt)
이 문제를 풀면서 오류가 계속 났던 부분은,
word = input() # ENTER
print(word =='ENTER') # False
이렇게 ENTER를 input한 word랑 ENTER를 비교했을 때 서로 다르다고 나왔다.
print(word, 'ENTER')를 해보니 하나는 ENTER 잘 나오고, 하나는 띄어쓰기+ENTER 나온다.
문제의 원인은 input()을 했을 때 그 출력값 뒤에 개행이 추가되서인 것 같다.
문제의 해결은, word = input()[:-1] 이렇게 해주었다. print(word =='ENTER')가 True로 잘 나온다.
이런 해결방법 말고 다른 방법은 없을까 좀 더 멋있게 풀구 싶자나~~~
팀원 분이 좋은 걸 알려주셨당 ㅎ rstrip()을 하면 input()을 할 때 오른쪽에 개행이 생기지 않는다.
더 정확히 개념을 살펴보면,
strip([chars]) : 인자로 전달된 문자를 String의 왼쪽과 오른쪽에서 제거한다.
lstrip([chars]) : 인자로 전달된 문자를 String의 왼쪽에서 제거한다.
rstrip([chars]) : 인자로 전달된 문자를 String의 오른쪽에서 제거한다.
인자를 전달하지 않을 수도 있으며, 인자를 전달하지 않으면 String에서 공백을 제거한다.
인자로 문자 1개를 전달하면 그 문자와 동일한 것을 모두 제거한다. 동일하지 않은 문자가 나올 때까지 제거한다.
rstip()을 사용하여 다음과 같이 풀 수 있다.
해결 2
import sys
input = sys.stdin.readline
N= int(input())
cnt = 0
inputset = set()
for _ in range(N):
word = input().rstrip()
# print(word =='ENTER') # True 나옴
if word != 'ENTER':
if word not in inputset:
cnt += 1
inputset.add(word)
else:
inputset.clear()
print(cnt)
2. 성택이의 은밀한 비밀번호
25372번: 성택이의 은밀한 비밀번호 (acmicpc.net)
25372번: 성택이의 은밀한 비밀번호
부산사이버대학교 학생 성택이는 엄마의 의뢰를 받아 주어진 문자열이 현관문 비밀번호에 사용 가능한지 알아내야 한다. 성택이는 공부해야 하므로 우리가 도와주자! 사용할 수 있는 비밀번호
www.acmicpc.net
해결 1
import sys
input = sys.stdin.readline
N = int(input())
strings = []
for _ in range(N):
strings.append(input())
# print(strings) # ['asdf\n', 'asdfghh\n', 'asdfhhjjjj\n']
# print(len(strings[0])) # 5
for i in strings:
if len(i) >= 7 and len(i) <= 10:
print("yes")
else:
print("no")
나는 input값들을 리스트로 만들어 문제를 해결했다.
input()을 여러 개를 했기 때문에 input값 오른쪽에 개행이 붙는다.
그래서 4개짜리 문자열을 5개 길이의 문자열로 인식한다.
print(strings) # ['asdf\n', 'asdfghh\n', 'asdfhhjjjj\n']
print(len(strings[0])) # 5
따라서 6부터 9 길이의 문자열인지 파악하기 위해 7부터 10 길이의 문자열인지 확인해주었다.
이것도 처음부터 input().rstrip()을 한다면 따로 생각해주지 않고 6부터 9 길이의 문자열인지 확인해주면 된다.
해결 2
import sys
input = sys.stdin.readline
N = int(input())
strings = []
for _ in range(N):
strings.append(input().rstip())
# print(strings) # ['asdfge', 'asdg312dsg', 'asfdfe32']
# print(len(strings[0])) # 6
for i in strings:
if len(i) >= 6 and len(i) <= 9:
print("yes")
else:
print("no")
3. 별찍기 8
2445번: 별 찍기 - 8
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
www.acmicpc.net
해결 1 - rjust(), ljust()를 사용하여 문제를 해결했다.
import sys
input = sys.stdin.readline
N = int(input())
for i in range(N):
star = '*'*(i+1)
print(star.ljust(N)+star.rjust(N))
for i in range(N-1):
star = '*'*(N-1-i)
print(star.ljust(N)+star.rjust(N))
for i in range(N):
star = '*'*(i+1)
print(star.ljust(N)+star.rjust(N))
이것의 결과값은,
* *
** **
*** ***
**** ****
**********
for i in range(N-1):
star = '*'*(N-1-i)
print(star.ljust(N)+star.rjust(N))
이것의 결과값은,
**** ****
*** ***
** **
* *
이 두 코드를 합쳐서 다음과 같이 나오면 끝!
* *
** **
*** ***
**** ****
**********
**** ****
*** ***
** **
* *
우리 팀원분들의 코드도 너무 좋아서 함께 소개해보려고 한당!!
해결 2
import sys
N = int(sys.stdin.readline().rstrip())
for i in range(1, 2 * N):
if i <= N:
i = i
else:
i = 2 * N - i
print("*" * i + " " * (2 * (N - i)) + "*" * i)
해결 3 - 재귀
def solution(n,i):
if n<=0:
return n
print(("*"*i) + (" "*(n-1))*2 + ("*"*i))
solution(n-1,i+1)
if n-1 != 0:
print(("*"*i) + (" "*(n-1))*2 + ("*"*i))
return n
n = int(input())
solution(n,1)
참고자료
'오류 및 알고리즘정리본' 카테고리의 다른 글
| 22. [백준] 스택과 AC문제 (0) | 2023.06.01 |
|---|---|
| 21. [백준] 별찍기 7, 붙임성 좋은 총총이 (0) | 2023.06.01 |
| 19. 백준 알고리즘 세금, 소수 찾기(에라토스테네스의 체) (0) | 2023.05.19 |
| 18. 백준 알고리즘 개, 별찍기 2 (0) | 2023.05.19 |
| 17. 백준 알고리즘 고양이, 백발백중, 별찍기1 (0) | 2023.05.18 |