일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- OFFSET
- 소프티어
- 백준
- 처우산정
- BOJ
- 연결요소
- 기술면접
- BFS
- compose
- 13908
- upper_bound
- boj #19237 #어른 상어
- Kafka
- 성적평가
- 퇴사통보
- softeer
- 처우협의
- 이분탐색
- 물채우기
- msSQL
- Docker
- 백트래킹
- 경력
- @P0
- incr
- 파라메트릭
- dfs
- 6987
- 매개변수탐색
- 오퍼레터
- Today
- Total
목록알고리즘 문제/BOJ (413)
기술 블로그
수학, 자료구조, multimap https://www.acmicpc.net/problem/9375 각 Type에 Name을 담는다. 이때, 숫자가 아닌 문자열이고, 1개 초과로 담아야 하므로, multimap을 이용한다. 정답은 (각 Type에 속해 있는 Name의 개수 + 1)을 Type 수에 맞게 연산한다. #include using namespace std; int T, n; multimap mm; set st; int main() { //freopen("C:\\Users\\park7\\Desktop\\lazy_bronze\\2.in", "r", stdin); cin.tie(0); scanf("%d", &T); while (T--) { cin >> n; st.clear(); mm.clear(); ..
https://www.acmicpc.net/problem/2467 이분탐색 문제다. 참고로 두 용액의 합이 0이 될 수도 있다. 1. 맨 처음 원소와 맨 마지막 원소의 비교를 처음으로 설정한다. L = 0, R = v.size() - 1 2. 비교할 값(pivot)을 설정해, 각각의 절댓값을 비교하여 pivot을 갱신한다. 절댓값을 활용하는 이유는 -와 +를 고려할 필요가 없이 무조건 둘 중 작은 값이 0에 가깝기 때문이다. 3. L과 R은 v의 인덱스이고, (v[L] + v[R])이 0을 기준으로 큰지, 작은지, 같은지 비교한다. 4. 3의 결과에 따라, L과 R을 적절히 연산한다. 처음에 틀렸었는데 Update 함수 내의 if 조건문에서 pivot > abs(sum)로 작성했었다. pivot > ab..
www.acmicpc.net/problem/6987 6987번: 월드컵 www.acmicpc.net 예제 1에서 2번째 경우 계속 1이 아니라 0이 나와서 코드를 봤더니 bool chk = true;를 엉뚱한 곳에서 선언했었다. 이때문에 chk가 한 번이라도 false가 되버리면 그 후 계속 false가 되버리는 논리적인 오류가 있었다. 그래서 위치만 고쳤더니 예제 1도 맞고, 정답이었다. score[1 ~ 6][1 ~ 3] 1. (왼쪽 인덱스) A를 1로, B는 2로, ..., F는 6으로 생각하자. 2. (오른쪽 인덱스) 1은 승리, 2는 무승부, 3은 패배 #include using namespace std; int n, m; bool use[10]; int arr[10][20], score[10]..
www.acmicpc.net/problem/13908 13908번: 비밀번호 첫 번째 예제의 경우 가능한 비밀번호의 조합은 07, 17, 27, 37, 47, 57, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 87, 97이다. 두 번째 예제의 경우 가능한 비밀번호의 조합은 34, 43이다. www.acmicpc.net 첫 번째 코드 : 백트래킹 - 추천 두 번째 코드 : int 숫자를 string 변환하면서, for문으로 모든 경우 다 탐색(개수를 셈하여 활용하는 방식) - 비추천 첫 번째 코드의 속도가 두 번째 코드의 속도보다 더 빠르다. #include using namespace std; int n, m, answer, a[10]; vector v; void bt..
www.acmicpc.net/problem/14391 14391번: 종이 조각 영선이는 숫자가 쓰여 있는 직사각형 종이를 가지고 있다. 종이는 1×1 크기의 정사각형 칸으로 나누어져 있고, 숫자는 각 칸에 하나씩 쓰여 있다. 행은 위에서부터 아래까지 번호가 매겨져 있고, www.acmicpc.net use 2차원 배열이 true일 때는 가로, false일 때는 세로로 생각하여 계산한다. #include using namespace std; #define MAX 5 int R, C, answer = INT32_MIN; int p[MAX][MAX]; bool use[MAX][MAX], tmp[MAX][MAX]; int calc(vector &v) { string str = ""; for (auto i : v..
www.acmicpc.net/problem/17485 17485번: 진우의 달 여행 (Large) 첫줄에 지구와 달 사이 공간을 나타내는 행렬의 크기를 나타내는 N, M (2 ≤ N, M ≤ 1000)이 주어진다. 다음 N줄 동안 각 행렬의 원소 값이 주어진다. 각 행렬의 원소값은 100 이하의 자연수이다. www.acmicpc.net 맞은 문제이지만, 이상하게 다른 정답 코드들보다 긴 것 같았다. (아래는 내 코드이고, 맨 아래 코드가 정답자 분의 코드를 참고하여 다시 구현한 코드이다.) #include using namespace std; #define MAX 1010 int m[MAX][MAX], R, C; int dp[MAX][MAX][3]; int main(void) { cin.tie(0); i..
www.acmicpc.net/problem/1562 1562번: 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 10844번 쉬운 계단 수에서 0 ~ 9를 방문했는지만 체크하면 된다.(차원을 하나 더 늘려서 비트마스킹 활용) #include using namespace std; #define Mod 1000000000 #define LL long long // 1111111111(2) = 1023 // dp[a][b][c] : 길이 a, 끝자리 수 b, 방문표시 1
www.acmicpc.net/problem/19237 // https://www.acmicpc.net/problem/19237 #include using namespace std; #define SHARK_MAX 1010 #define BOARD_MAX_SIZE 22 // 1:위, 2:아래, 3:왼, 4:오 // N:배열 크기, M:상어 수(1~M), K:시간 int N, M, K; // 1~M번 상어의 위치(y, x) pair shark_position[SHARK_MAX]; // 냄새에 대한 정보 배열(상어 번호, 시간) pair smell[BOARD_MAX_SIZE][BOARD_MAX_SIZE]; // n번 상어의 현재 방향 int now_shark_direction[SHARK_MAX]; // n번 ..