오늘 푼 문제는 1083번입니다
코드를 3번정도 틀린 후에 맞았습니다.
1. 정답코드
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
32
33
|
#저는 일단 습관 처럼 input을 sys.stdin.readline으로 바꿔줍니다.
#연산이 더 빨라서 이용하다보니 그냥 처음부터 해놓는게 편하더라고요.
import sys
input=sys.stdin.readline
#입력값들 받는 부분
N=int(input())
num=[int(i) for i in input().split()]
S=int(input())
#반복문
while True:
#무한 반복문을 끝낼 방법을 생각하다가 만든 컨트롤 변수입니다.
control=False
#아래는 가장 큰 수를 구해서 S보다 작으면 index로 순서를 바꿔주는 겁니다.
for i in range(N):
count=0
index=i
for j in range(i,N):
if num[index]<num[j] and j-i<=S:
index=j
control=True
count=j-i
if(index!=i):
change=num[index]
del num[index]
num.insert(i,change)
S-=count
break
#바뀐부분이 없이 for문이 진행됐을 경우 무한 반복도 종료합니다.
if control==False:
break
#
for i in range(N):
print(num[i],end=' ')
|
cs |
정답을 맞춘 코드인데 .. 책의 도움을 받아서 풀었습니다.
책의 저자도 처음에는 단순히 i번째와 i+1번째를 비교해서 바꿔주는 식으로 만들었지만
그렇게하면 틀린 답이 나오게 됩니다.
저도 처음에 단순하게 바꿔서 풀었는데 그 코드를 보여드리겠습니다.
2. 오답코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import sys
input=sys.stdin.readline
N=int(input())
num=[]
num=input().split()
k=int(input())
count=0
while True:
if count==k:
break
for i in range(N-1):
if(num[i]<num[i+1]):
b=num[i]
c=num[i+1]
num[i]=c
num[i+1]=b
count+=1
break
for i in range(N):
print(num[i],end=' ')
|
cs |
솔직히 너무 쉽게 풀린다 생각해서 틀릴 것을 직감하긴했습니다.
근데 예제도 똑같이 나오길래 일단 질러보았는데 역시나 틀렸습니다라고 나오더라고요
그래서 곰곰히 생각을 하다가 책의 힌트도 봐가면서 얻은 아이디어가
바꿀 수 있는 횟수보다 작은 공간안에서의 가장 큰 수를 찾아서 바꿔주는 것이 여기서 필요한
아이디어였습니다.
그래서 제가 그 아이디어를 통해서 만든 코드가
3. 아이디어를 얻은 후 오답코드
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
|
import sys
input=sys.stdin.readline
N=int(input())
num=[int(i) for i in input().split()]
S=int(input())
while True:
count=0
for i in range(N):
count=0
change=0
index=0
for j in range(i,N):
if num[i]<num[j] and j-i<=S:
count=j-i
change=num[j]
index=j
if(change!=0):
del num[index]
num.insert(i,change)
S-=count
break
if count==0:
break
for i in range(N):
print(num[i],end=' ')
|
cs |
이렇게 만들었더니 가끔 출력이 이상한 경우가 생기더라고요.
왜인지 분석을 해본 결과 num[i]랑만 비교를 하다보니 가장 큰수가 담기는 것이 아닌
num[i]보다만 크면 되는 그 숫자로 바뀌어서 뒤에있는 숫자중에 S안에 있는 num[i]보다
큰수가 담겨서 바뀌더라고요 ...
그래서 해결해낸 정답 코드가 첫 번째 코드입니다.
아직 많이 부족하고 간단한 문제처럼보이지만 시간도 오래걸리는 편이지만
조급해하지않고 천천히 나아가보려고합니다.
처음으로 블로그에 코드를 입력해보는데 html방식으로 입력하는 사이트를 사용하면서
이용해보니 학교에서 배운 인터넷설계 시간이 생각나서 반갑네요.
배워서 쓸모없는 것은 없는 것 같아요.
부족한 풀이 읽어주셔서 감사합니다.
'공부 > algorithm with python' 카테고리의 다른 글
백준 알고리즘 1025번 파이썬 제곱수 찾기 (0) | 2022.07.14 |
---|---|
백준 1024번 파이썬 풀이! (0) | 2022.07.02 |
백준 알고리즘) 7576번 토마토 파이썬 (0) | 2022.06.05 |
백준 알고리즘) 14502번 연구소 파이썬 ! (0) | 2022.05.12 |
최근댓글