https://www.acmicpc.net/problem/1543
1543번: 문서 검색
세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한
www.acmicpc.net
# 내가 짠코드
word = str(input())
data = str(input())
# word = "aaaaaaa"
# data = "aa"
# word = "ababababa"
# data = "aba"
rew ,reda = word.replace(" ", ""), data.replace(" ", "")
rn = len(reda)
num, count = 0, 0
for i in range(len(rew)):
if i == num:
temp = rew[i:i+rn]
# print(rew,temp, reda, i)
if reda == temp:
count +=1
num += rn
else:
num += 1
print(count)
# 프로그래머스 코드
# word = str(input())
# data = str(input())
word = "aaaaaaa"
data = "aa"
# word = "ababababa"
# data = "aba"
# rew ,reda = word.replace(" ", ""), data.replace(" ", "")
# rn = len(reda)
index, count = 0, 0
while len(word) - index >= len(data):
temp = word[index:index+len(data)]
# print(rew,temp, reda, i)
if temp == data:
count +=1
index += len(data)
else:
index += 1
print(count)
- "n.replace(" ", "")매개변수 공백을 제거하고 싶을 때 사용
https://www.acmicpc.net/problem/1568
1568번: 새
N마리의 새가 나무에 앉아있고, 자연수를 배우기 원한다. 새들은 1부터 모든 자연수를 오름차순으로 노래한다. 어떤 숫자 K를 노래할 때, K마리의 새가 나무에서 하늘을 향해 날아간다. 만약, 현
www.acmicpc.net
# 나는 바보인듯
n = int(input())
count, result = 1, 0
while n > 0:
if count > n:
count = 1
n -= count # 남아있는 수
count += 1 # 불러야 하는 수
result +=1
print(result)
https://www.acmicpc.net/problem/1302
1302번: 베스트셀러
첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고
www.acmicpc.net
# 정답
# import sys
# input = sys.stdin.readline
dic = {}
for i in range(int(input())):
data = str(input())
if data in dic.keys():
dic[data] +=1
else:
dic[data] = 1
# dic = {'a': 2, 'c': 3, 'b': 3, 'd': 1}
rdic = sorted(dic.items(), key=lambda x:(x[0]))
for i, j in rdic:
if max(dic.values()) == j:
print(i)
break
# print(max(dic.values()), rdic)
# 해설코드
# import sys
# input = sys.stdin.readline
# dic = {}
# for i in range(int(input())):
# data = str(input())
# if data in dic.keys():
# dic[data] +=1
# else:
# dic[data] = 1
dic = {'a': 2, 'c': 3, 'b': 3, 'd': 1}
array = []
# rdic = sorted(dic.items(), key=lambda x:(x[0]))
for i, j in rdic:
if max(dic.values()) == j:
array.append(i)
print(sorted(array))
# print(max(dic.values()), rdic)
- 내 코드는 str 기준으로 미리 정렬해서 반복문을 돌렸고
- 해설 기준은 바로 집어 넣은뒤 마지막에 str 정렬해서 사용함.
https://www.acmicpc.net/problem/1668
1668번: 트로피 진열
민식이는 “오민식”이라는 팀이름으로 수없이 많은 로봇대회를 우승했다. 따라서 민식이의 집에는 트로피가 많다. 민식이는 트로피를 어떤 선반 위에 올려놨다. 이 선반은 민식이의 방문을 열
www.acmicpc.net
# 내 작성코드
temp = []
for i in range(int(input())):
temp.append(int(input()))
array = [temp[0]]
for i in range(len(temp)):
if i != 0:
if array[-1] < temp[i] :
array.append(temp[i])
print(len(array))
temp.reverse()
array = [temp[0]]
for i in range(len(temp)):
if i != 0:
if array[-1] < temp[i] :
array.append(temp[i])
print(len(array))
# 해설코드
def check(array):
now = array[0]
result = 1
for i in range(1, len(array)):
if now < array[i]:
result +=1
now = array[i]
return result
n = int(input())
array = []
for i in range(n):
array.append(int(input()))
print(check(array))
array.reverse()
print(check(array))
- 비교 방식은 비슷하지만 나는 결과 값으로 리스트의 전체 길이를 반환함 또한 리스트에 배열 첫번쨰를 넣고 시작함
- 해설 방식이 시간은 같지만 코드 가독성이 좋음
- 내 코드였을때는 리스트에 먼저 집어넣고 이후 두번째부터 비교했다면 해설 코드는
- 이전 첫번째 값"now = array[0]"으로 값을 잡고 두번째로 for 문을 한단계 앞에서 시작하여 비교함
- 만약 "now"보다 뒤에값이 클경우 "now = array[i]"로 다시 재설정한뒤 "result +=1" 해줌
- 내 코드였을때는 리스트에 먼저 집어넣고 이후 두번째부터 비교했다면 해설 코드는
- 추가로 reversed(), a.reverse() 말고 쓰기 좋은 방법은 "a[::-1]"도 있다.
https://www.acmicpc.net/problem/1236
1236번: 성 지키기
첫째 줄에 성의 세로 크기 N과 가로 크기 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 성의 상태가 주어진다. 성의 상태는 .은 빈칸, X는 경비원이 있는 칸이다
www.acmicpc.net
# 작성한 정답코드 핵심은 16 line
def minimum(x):
answer = 0
for i in x:
if "X" not in i:
answer += 1
return answer
array = []
n, m = map(int, input().split())
for i in range(n):
data = list(input())
array.append(data)
newarray = list(map(list, zip(*array))) # 행과 렬 뒤집기
a = max(minimum(array),minimum(newarray))
print(a)
- 나는 완전 탐색이라기 보단 배열 내 "x"가 있는지만 찾았음.
- 행 전체를 기준으로 찾는것은 문제없었지만 위 문제의 핵심은 열로 다시 찾아서 서로 max 값을 도출하는 것임
- 위 문제의 핵심은 행과 열을 서로 바꿔주기 위해선 zip 함수를 사용해야함.
- ex) "new_array = list(map(list, zip(*array)))" <---- 위 zip 라이브러리가 행과 열을 변경해주는 것임
n, m = map(int, input().split())
array = []
for _ in range(n):
array.append(input())
row = [0] * n
column = [0] * m
for i in range(n):
for j in range(m):
if array[i][j] == "X":
row[i] = 1
column[j] = 1
row_count = 0
for i in range(n):
if row[i] == 0:
row_count +=1
column_count = 0
for j in range(m):
if column[j] == 0:
column_count += 1
print(max(row_count,column_count))
- 처음 2차원 리스트를 돌면서 X를 찾음. 이 때 라인 한쪽 끝으로 민다고 가정하여 row[i], column[j] 쪽으로 1로 처리함
- row 돌아서 1이 안들어 간곳은 경비원이 필요한 곳이므로 +1씩함 column또한 마찬가지
'CoTe > fastcampus' 카테고리의 다른 글
07. 고급 탐색 알고리즘 - 기초 문제풀이 - 트리 (0) | 2024.03.19 |
---|---|
06. 기본 탐색 알고리즘 - 핵심 유형 문제풀이 - 이진 탐색 (0) | 2024.03.16 |
6. 기본 자료구조 - 핵심 유형 문제 풀이-3 - 덱 (0) | 2024.03.10 |
05. 기본 자료구조 - 핵심 유형 문제 풀이-2 -자료구조, 스택, 데크 (0) | 2024.03.07 |
04. 기본 자료구조 - 핵심 유형 문제 풀이-1 - 스택 (0) | 2024.03.06 |