백준 1039번 교환
< 백준 1039번 교환 - 마포 코딩박 >
사용한 알고리즘: BFS
N자리 숫자가 주어지고, 이 숫자의 i번째와 j번째를 바꾸는 것을 K번 했을때 나올 수 있는 최대 숫자를 구하는 문제였습니다.
문제풀이는 다음과 같습니다.
(1) (코드: 63~64)
주어진 숫자가 1자리 수이거나, 2자리수이면서 뒷자리가 0인 경우 조건에 의해 바꾸는 행동을 할 수 없습니다. 이때 -1 을 출력합니다.
(2) (코드: 8~15)
string으로 받은 숫자를 int로 변환해주는 함수를 하나 만들어줍니다.
(3) (코드: 17~57)
x번 바꾼 숫자를 저장할 queue를 만듭니다.
처음에는 0번 바뀐 (처음 입력받은) 숫자를 queue에 넣어줍니다.
queue에 들어있는 x번 바뀐 모든 수를 꺼내 각 수의 모든 가능한 i<->j 바꾸기를 해준 후 다시 queue에 저장합니다.
( 이후 queue에는 x+1번 바뀐 모든 수가 들어있게됩니다.)
(4) (코드: Visit, 27줄)
과정 (3)을 진행하며, set<string> 을 만들어 중복해서 저장하는 것을 피합니다.
(5) (코드: 43,44)
K번 바뀐 수 중 최대를 답으로 출력합니다.
사용한 알고리즘: BFS
N자리 숫자가 주어지고, 이 숫자의 i번째와 j번째를 바꾸는 것을 K번 했을때 나올 수 있는 최대 숫자를 구하는 문제였습니다.
문제풀이는 다음과 같습니다.
(1) (코드: 63~64)
주어진 숫자가 1자리 수이거나, 2자리수이면서 뒷자리가 0인 경우 조건에 의해 바꾸는 행동을 할 수 없습니다. 이때 -1 을 출력합니다.
(2) (코드: 8~15)
string으로 받은 숫자를 int로 변환해주는 함수를 하나 만들어줍니다.
(3) (코드: 17~57)
x번 바꾼 숫자를 저장할 queue를 만듭니다.
처음에는 0번 바뀐 (처음 입력받은) 숫자를 queue에 넣어줍니다.
queue에 들어있는 x번 바뀐 모든 수를 꺼내 각 수의 모든 가능한 i<->j 바꾸기를 해준 후 다시 queue에 저장합니다.
( 이후 queue에는 x+1번 바뀐 모든 수가 들어있게됩니다.)
(4) (코드: Visit, 27줄)
과정 (3)을 진행하며, set<string> 을 만들어 중복해서 저장하는 것을 피합니다.
(5) (코드: 43,44)
K번 바뀐 수 중 최대를 답으로 출력합니다.
댓글
댓글 쓰기
긴 글 읽어주셔서 감사합니다.
궁금한게 있으시다면 댓글 달아주세요!