BAEKJOON : 10820, 11655, 2609
No. 10820
1. Problem
2. My Solution
- except EOFError 예외는 input() 함수로 입력을 받을 때만 적용 가능
- 따라서 while() 문의 종료 조건이 존재하지 않음 -> 출력 초과
import sys
while(True):
try:
sentence = sys.stdin.readline()
result = [0] * 4
for i in sentence:
if 'a' <= i <= 'z':
result[0] += 1
elif 'A' <= i <= 'Z':
result[1] += 1
elif i == ' ':
result[3] += 1
else:
result[2] += 1
result[2] -= 1
print(' '.join(map(str,result)))
except EOFError:
break
3. Others' Solutions
- readline() 으로 입력 받을 때는 None 인지 아닌지 판단
- readline() 으로 입력 받을 때는 마지막에 입력되는 Enter ('\n') 문자까지 포함됨
- rstrip() 함수를 이용해 오른쪽에서 개행문자 ('\n') 제거
import sys
while(True):
sentence = sys.stdin.readline().rstrip('\n')
result = [0] * 4
if not sentence: # None 이면 break
break
for i in sentence:
if i.islower():
result[0] += 1
elif i.isupper():
result[1] += 1
elif i.isdigit():
result[2] += 1
elif i.isspace():
result[3] += 1
print(' '.join(map(str,result)))
4. Learned
- input() 으로 입력 받을 때는 except EOFError
- readline() 으로 입력 받을 때는 None 체크
- 개행 문자는 '\n' 로 표시하지만 실제 내부에서는 길이 1인 개행문자로 인식되므로 ord() 결과 10 이 반환
- strip() 의 인자로 여러 문자를 넣으면 포함되는 문자 모두 제거 (참고 블로그)
No. 11655
1. Problem
2. My Solution
- 첫 번째 방법
- 문자열 하나를 공백 기준으로 단어로 나눔
- 문제 해석 잘못함 -> "출력형식이 잘못되었습니다."
import sys
sentence = sys.stdin.readline().strip().split()
result = []
for word in sentence:
temp =''
for char in word:
if char.isdigit():
temp += str(char)
elif char.islower():
temp += chr((((ord(char) - 97) + 13) % 26)+97)
elif char.isupper():
temp += chr((((ord(char) - 65 ) + 13) % 26)+65)
result.append(temp)
print(' '.join(result))
- 두 번째 방법
- 문자열을 통째로 작업 수행
- readline() 으로 입력 받을 때 오른쪽 끝의 공백만 지워야함
mport sys
sentence = sys.stdin.readline().rstrip()
result = ''
for char in sentence:
if char.isdigit():
result += str(char)
elif char.islower():
result += chr((((ord(char) - 97) + 13) % 26)+97)
elif char.isupper():
result += chr((((ord(char) - 65 ) + 13) % 26)+65)
elif char.isspace():
result += ' '
print(result)
3. Learned
- 문제의 출제 의도를 잘 파악하자
- 문자열 중간에 공백도 포함시켜야 될 때는 strip() -> rstrip() 적용
No. 2609
1. Problem
2. My Solution
- 첫 번째 방법
- 9999 9998 일때 최소 공배수는 99970002 이므로 대략 1억번 연산이 이루어짐 -> 시간 초과
import sys
a,b = map(int,sys.stdin.readline().rstrip().split())
max_num = 0
min_num = 0
i = min(a,b)
while(i > 0):
if a % i == 0 and b % i ==0:
max_num = i
break
i = min(a,b)//max_num
while(True):
if max_num * i % a == 0 and max_num * i % b ==0:
min_num = max_num * i
break
else:
i += 1
print(max_num)
print(min_num)
- 두 번째 방법
- 최대 공약수와 최소 공배수의 관계를 이용
import sys
a,b = map(int,sys.stdin.readline().rstrip().split())
i = min(a,b)
while(i > 0):
if a % i == 0 and b % i ==0:
max_num = i
break
else:
i -= 1
min_num = a*b // max_num
print(max_num)
print(min_num)
3. Learned
- 두 수의 곱 = 최대 공약수 * 최대 공배수
- time.start () 함수를 이용하여 어느 부분에서 시간이 오래 걸리는지 파악하자
Author And Source
이 문제에 관하여(BAEKJOON : 10820, 11655, 2609), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@codren/BAEKJOON-10820저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)