Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- JVM
- MySQL
- spring cloud
- spring security
- springboot
- Coroutine
- 백준
- spring oauth
- 백준 16235
- java 기술면접
- MSA
- sql 기술면접
- 백준 19238
- Kotlin
- re.split
- JPA
- 프로그래머스
- 백준 16719
- 웹어플리케이션 서버
- Spring Boot
- with recursive
- 프로래머스
- 백준 17626
- 파이썬
- 백준 17779
- 백준 16236
- java
- 백준 파이썬
- 백준 15685
- Spring
Archives
- Today
- Total
시작이 반
[백준] 17140번 (python 파이썬) 본문
SMALL
구현, 시뮬레이션 문제이다.
여기서 생각해 봐야할 것은
1. 어떻게 숫자를 세고 센 숫자를 적은 숫자 부터 넣을것인지
2. 행에 대해서의 계산은 쉽지만 열에 대한 계산을 어떻게 할것인지
이 2가지이다.
1번
이 문제는 사전을 사용하였다.
각 숫자에 대해 key로 사용하였으며 나온 횟수를 value로 사용하였다.
그 후에 value를 기준으로 큰것부터 정렬을 하였다.
사전을 정렬하면 [(key, vlaue)] 형식의 리스트가 나온다.
그 다음으로는 리스트의 값을 pop하면서 다시 새로운 2차원 리스트를 만들어줬다.
2번
이 문제는
일단 열을 보면서 반복을 하는데 새로운 2차원 리스트의 행에 넣어준다.
그 후에 만들어진 새로운 리스트의 x, y 값을 다시 새로운 리스트를 만들어 y, x 좌표에 넣어준다.
r, c, k = map(int, input().split(' '))
a = [list(map(int, input().split(' '))) for _ in range(3)]
time = 0
def r_solve(row, col):
max_len = 0
for i in range(row):
number_dict = dict()
while a[i]:
a_value = a[i].pop()
if a_value == 0:
continue
if a_value in number_dict:
number_dict[a_value] += 1
else:
number_dict[a_value] = 1
sort_dict = sorted(number_dict.items(), key=lambda x: (-x[1], -x[0]))
while sort_dict:
a_value, a_count = sort_dict.pop()
a[i].append(a_value)
a[i].append(a_count)
max_len = max(max_len, len(a[i]))
for i in range(row):
row_len = len(a[i])
while row_len != max_len:
a[i].append(0)
row_len += 1
def c_solce(row, col):
global a
max_len = 0
new_a = [list() for _ in range(col)]
for j in range(col):
number_dict = dict()
for i in range(row):
if a[i][j] == 0:
continue
else:
if a[i][j] in number_dict:
number_dict[a[i][j]] += 1
else:
number_dict[a[i][j]] = 1
sort_dict = sorted(number_dict.items(), key=lambda x: (-x[1], -x[0]))
while sort_dict:
a_value, a_count = sort_dict.pop()
new_a[j].append(a_value)
new_a[j].append(a_count)
max_len = max(max_len, len(new_a[j]))
for i in range(col):
row_len = len(new_a[i])
while row_len != max_len:
new_a[i].append(0)
row_len += 1
a = [[0] * len(new_a) for _ in range(len(new_a[0]))]
for i in range(len(new_a)):
for j in range(len(new_a[0])):
a[j][i] = new_a[i][j]
def solve():
global time, a
while True:
if time > 100:
break
if len(a) >= r and len(a[0]) >= c:
if a[r-1][c-1] == k:
break
row = len(a)
col = len(a[0])
if row >= col:
r_solve(row, col)
else:
c_solce(row, col)
if len(a) > 100:
a = a[:100]
if len(a[0]) > 100:
for i in range(len(a)):
a[i] = a[i][:100]
time += 1
solve()
if time > 100:
print(-1)
else:
print(time)
LIST
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 17626번 (python 파이썬) (0) | 2021.04.17 |
---|---|
[백준] 13549번 (python 파이썬) (0) | 2021.04.17 |
[백준] 17135번 (python 파이썬) (0) | 2021.04.16 |
[백준] 16235번 (python 파이썬) (0) | 2021.04.14 |
[백준] 15685번 (python 파이썬) (1) | 2021.04.14 |