티스토리 뷰
[BOJ 2529(S2) 리뷰]
오랜만에 백트래킹 카테고리에서 문제를 풀었다. 실버문제라 그런지 쉽게 구현을 떠올릴 수 있었다.
전형적인 백트래킹 방법을 통해서 부등호 조건에 맞지 않는 경우 가지치기를 하면 된다.
다만 출력할때 021 이런식으로 맨 앞자리에 0이 오는경우가 있으므로 문자열로 출력해야 한다.
이때 어떻게 할까 고민을하다 그냥 string객체에 max,min함수를 써봤는데 잘 동작했다.
#include <iostream>
#include <queue>
#include <algorithm>
#include <vector>
using namespace std;
char ans[10];
string ansmin("987654321");
string ansmax("0");
vector <char> sign;
bool isUsed[10];
int k;
void go(int n)
{
if (n > 1)
{
char s = sign[n-2];
if (s == '>')
{
if (ans[n - 2] < ans[n-1])
return;
}
else if (s == '<')
{
if (ans[n - 2] > ans[n-1])
return;
}
}
if (n == k + 1)
{
ans[k + 1] = '\0';
string s(ans);
ansmax=max(s, ansmax);
ansmin=min(s, ansmin);
return;
}
for (char c = '0'; c <= '9'; c++)
{
if (isUsed[c - '0']) continue;
ans[n] = c;
isUsed[c - '0'] = 1;
go(n + 1);
isUsed[c - '0'] = 0;
}
}
int main()
{
cin.tie(0);
ios::sync_with_stdio(0);
cin >> k;
for (int i=0;i<k;i++)
{
char c;
cin >> c;
sign.push_back(c);
}
go(0);
cout << ansmax << '\n' << ansmin;
}
'알고리즘 풀이 > 백트래킹' 카테고리의 다른 글
BOJ : 13908 비밀번호 (0) | 2021.02.08 |
---|---|
BOJ : 1062 가르침 (0) | 2021.01.11 |
BOJ : 14502 연구소 (0) | 2020.08.21 |
BOJ : 15683 감시 (0) | 2020.08.18 |
BOJ : 15686 치킨 배달 (0) | 2020.08.18 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 시뮬레이션
- 자바
- ReactNative
- 예외처리
- typeORM
- boj
- 백트래킹
- dfs
- nestjs
- 동적계획법
- 중앙대학교
- java
- 자바스크립트
- 그리디
- 재귀
- Computer Architecture
- 컴퓨터 구조
- 투포인터
- 세그먼트 트리
- 그래프
- nest.js
- 컴퓨터 통신
- 알고리즘
- node.js
- nodeJS
- BFS
- 스레드
- 벨만포드
- 백준
- 구현
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함