본문 바로가기

전체 글138

BOJ 14888 - 연산자 끼워넣기(C++) https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 풀이 연산자마다 가능한 수가 정해져있음 -> 해당 연산자 개수와 숫자 개수(N)의 모든 경우의 수 탐색(브루트 포스) 1. 연산 순서 백터의 크기가 N-1보다 작으면 현재 사용가능한 연산자중에서 하나를 연산순서에 push, 연산 순서 백터의 크기가 N-1과 같다면 2로 이동 * 계산할 수가 N개라면 연산자의 개수는 N-1 2. 해당 연산자 순.. 2021. 10. 16.
BOJ 2110 - 공유기 설치(C++) https://www.acmicpc.net/problem/2110 2110번: 공유기 설치 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가 www.acmicpc.net 풀이 두 공유기 사이의 거리에 대해 이분탐색을 이용 초기 값 -> left = 1, right = 공유기의 최대 좌표 1. mid = (left + right)/2 mid)로 했었는데 테스트 결과가 실패했음 문제에서의 거리는 공유기가 설치된 좌표까지 포함하는 거 였음 if(arr[i] - before >= mid) ex) 1, 3, 4 이고 거리.. 2021. 10. 14.
BOJ 2615 - 오목(C++) https://www.acmicpc.net/problem/2615 2615번: 오목 오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호 www.acmicpc.net 풀이 자표와 방향성에 대해 탐색했는지 확인을 위한 bool 3차원 배열 visit 사용 오목판의 현재 위치에 대해 8방향을 탐색해야하지만 2중 for문을 이용해 왼쪽에서 오른쪽, 위에서 아래로 탐색하기 때문에 4방향으로만(동, 남동, 남, 남서) 제한하여 탐색 위의 방향으로 탐색할 경우 (1, 1)을 시작으로 연속되었는지 확인 한 후 (2, 2)에서 (1, 1)로 연속성을 확인 비효율적이고 vis.. 2021. 10. 5.
BOJ 14889 - 스타트와 링크(C++) https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 풀이 1. 스타팀에 누가 포함될지 N/2명을 뽑는 경우의 수에 대해 탐색 - bool 자료형의 1차원 배열 visit을 이용하여 스타트 팀에 포함되었는지 여부를 확인 - 배열의 값이 true면 스타트 팀, false면 링크 팀 2. 스타트 팀, 링크 팀에 대해 각각 점수 계산 - 2중 for문을 이용하여 i와 j가 같은 팀일때의 해당 팀의 점수를 더함 - visit[i] && visit[j] 이면 스타트 팀, !vis.. 2021. 10. 5.
BOJ 1912 - 연속합(C++) https://www.acmicpc.net/problem/1912 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 풀이 연속된 수에 대한 최대값이기 때문에 2가지만 고려함 1. 연속하지 않을 때 - 이전 값과 연속할 때 현재 값보다 작은 경우, 자기 자신을 가지고 감 - dp[i] > (dp[i-1] + dp[i]) 2. 연속할 때 - 이전 값과 연속할 때 현재 값보다 큰 경우, 연속합을 가지고 감 - dp[i] < (dp[i-1] + dp[i]) 순서대로 탐색하며 1, 2를 적용하고 최대값을 갱신 #include #i.. 2021. 10. 5.
Programmers - 불량 사용장(Python) https://programmers.co.kr/learn/courses/30/lessons/64064?language=python3 코딩테스트 연습 - 불량 사용자 개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량 programmers.co.kr 풀이 유저 ID를 불량 아이디 개수에 맞게 조합하여 탐색 - 매칭되는 유저와 불량 아이디의 길이가 같아야함 - 불량 사용자와 유저의 문자를 비교 - 불량 사용자의 문자가 '*'이 아니라면 유저와 같은 문자여야함 * 위의 조건에 부합하고 현재 조합된 유저 아이디가 List에 없다면 List에 추가 from itertools impor.. 2021. 10. 4.
Programmers - 복서 정렬하기(C++) https://programmers.co.kr/learn/courses/30/lessons/85002 코딩테스트 연습 - 6주차_복서 정렬하기 복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요 programmers.co.kr 풀이 복서의 순서를 정렬하기 위한 기준과 우선 순위, 각 기준에서 전후가 결정나지 않으면 다음 기준으로 비교 1. 승률 2. 자신보다 무거운 선수를 이긴 횟수 3. 몸무게 4. 번호 복서마다 승률, 자기보다 무거운 선수를 이긴 횟수를 계산 - 승률의 경우 복서마다 ('W'의 갯수) / ('W', 'L'의 갯수) x .. 2021. 10. 4.
Programmers - 모음사전(Python) https://programmers.co.kr/learn/courses/30/lessons/84512?language=python3# 코딩테스트 연습 - 5주차_모음사전 사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니 programmers.co.kr 풀이 최대 길이는 5로 고정, 각 칸마다 5개의 알파벳이 들어올 수 있음 경우의 수?, 수학적 풀이가 필요함 5개의 칸의 "AAAE"의 경우 "A -> AA -> AAA -> AAAA"까지인 1+1+1+1=4에서 "AAAAA"~"AAAAU"의 5 뿐만 아니라 "AAAAU -> .. 2021. 9. 29.
BOJ 3190 - 뱀(C++) https://www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 풀이 Queue를 이용하여 뱀의 이동에 따른 머리의 위치정보를 계속 갱신 Queue는 FIFO(First In First Out)으로 Queue의 첫부분은 꼬리에 대한 정보, Queue의 끝부분은 머리에 대한 정보를 담음 1. 뱀 머리의 새로운 위치 계산 - 현재 뱀의 머리(Queue.back())와 방향 정보로 새로운 위치를 계산 - 계산한 위치가 격자를 벗어나거나 뱀의 몸에 부딪히면 게임 끝(retu.. 2021. 9. 29.