Java

문제 2239번: 스도쿠 스도쿠는 매우 간단한 숫자 퍼즐이다. 9×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9개의 3×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다. 예를 들어 다 www.acmicpc.net 접근 방식 스도쿠의 빈칸을 채우는 문제다. 특별한 규칙은 없기 때문에 백트래킹으로 매번 행과 열, 3*3칸을 확인해 주며 가능한 숫자들을 모두 시도해보아야 한다. 문제의 설명이 조금 헷갈렸는데 81 자리의 수가 제일 작은 경우라는 말이 81번째 칸을 말하는 게 아니라 9*9칸을 일렬로 늘어놨을 때 나오는 81자리 수를 말하는 것이기 때문에 백트래킹 자체를 1 ~ 9까지의 수를 오름차순으로 대입하다 보면 처음 나오는 결과가 가장 작은 수이기 때문에 그 ..
문제 15659번: 연산자 끼워넣기 (3) 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 접근 방식 기존의 연산자 끼워넣기 1, 2번 시리즈와 비슷하지만 연산자의 우선순위를 적용해야 해서 선택한 연산자들을 배열에 기록해 두었다 나중에 한 번에 연산을 해줘야 한다. 중간중간에 처리해서 빠르게 계산을 해보려 했는데 예제들은 통과가 되지만 제출하면 도무지 1 퍼에서 올라가질 않길래 포기하고 한 번에 연산을 해줬다. 기존 방식대로 각각의 연산자들을 선택할 수 있을 때 선택하는 방식으로 진행하..
문제 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 접근 방식 백트래킹으로 조건을 체크해가며 암호를 만들어주는 문제다. 암호는 다음과 같은 조건을 체크해줘야한다. 암호는 사전순으로 오름차순으로 정렬되어야 한다. 모음은 하나 이상, 자음은 2개 이상 포함되어야 한다. 그래서 입력으로 받은 문자 배열을 사전순으로 정렬한 후에 백트래킹으로 조합을 해주면서 모음과 자음을 카운트하여 파라미터로 들고 다니면 된다. 계속해서 조합을 하다 원하는 암호의 길이를 만족하면 모음과 자음수가 조건을 만족하는지 체크하고 만족하면 출력해..
문제 15658번: 연산자 끼워넣기 (2) 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1보다 크거나 같고, 4N보다 작거나 같은 4개의 정수가 주어지는데, 차례대 www.acmicpc.net 접근 방식 연산자 끼워넣기 1번이랑 다른 점은 주어진 연산자의 수가 주어진 수들보다 많을 수 있다는 것인데 기존 방식 그대로 풀어도 딱히 문제는 없다. 기존의 백트래킹 방식 자체가 애초에 모든 연산자를 다 사용해보기 때문에 수의 개수와 맞지 않아도 모두 조합해볼 수 있다. 풀이 class Main { static int n, max = -1000000001, min = Integer.MAX_VALUE..
문제 2529번: 부등호 두 종류의 부등호 기호 ‘’가 k개 나열된 순서열 A가 있다. 우리는 이 부등호 기호 앞뒤에 서로 다른 한 자릿수 숫자를 넣어서 모든 부등호 관계를 만족시키려고 한다. 예를 들어, 제시 www.acmicpc.net 접근 방식 백트래킹을 사용해 0 ~ 9까지의 수들을 한 번만 사용하며 조합해가면서 주어진 부등호의 순서와 대소관계가 일치하는지 확인해주면 된다. 첫 번째 고른 숫자를 제외하고 이후에는 부등호와 이전 숫자와 현재 숫자가 일치하는지 확인해주며 진행하면 된다. 모든 숫자를 고른 후에 부등호를 비교하는 것도 상관 없지만 매번 숫자를 고를 때마다 확인하면 중간에 맞지 않는 경우에 멈출 수 있어서 좋다. k가 9인 경우 최대 값이 9876543210이기 때문에 int 타입의 변수..
문제 10819번: 차이를 최대로 첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다. www.acmicpc.net 접근 방식 쉬운 조합 문제인데 문제를 잘못 봐서 헤맸다. abs(num[0] - num[1]) + abs(num[2] - num[3]) + ... + abs(num[n - 2] - num[n -1]) 가 아니라 abs(num[0] - num[1]) + abs(num[1] - num[2]) + ... + abs(num[n - 2] - num[n -1]) 인 부분을 조심해야 한다. 이 부분만 조심하면서 재귀 호출 시 파라미터로 이전까지의 계산을 넘겨주면서 백트래킹을 이용해 조..
문제 27964번: 콰트로치즈피자 치즈와 피자에 환장하는 비행씨는 매일같이 치즈피자를 사 먹다가 지갑이 거덜 나고 말았다. 만들어 먹는 것이 사 먹는 것보다 싸다는 것을 안 비행씨는 여러 가지 토핑을 가져와서 직접 피자를 www.acmicpc.net 접근 방식 토핑의 이름이 n개 주어질 때 Cheese로 끝나는 서로 다른 토핑이 4가지 이상인 경우에는 콰트로치즈피자를 만들 수 있으니 "yummy"를 그렇지 않다면 "sad"를 출력해줘야 한다. endsWith 메서드를 사용해 각 토핑이 Cheese로 끝나는지 확인하여 Set에 추가해준 후에 마지막에 Set의 사이즈가 4 이상인지 확인하면 된다. HashSet은 중복을 허용하지 않기 때문에 이런 문제에서 활용하기 좋다. 풀이 class Main { publ..
문제 12789번: 도키도키 간식드리미 인하대학교 학생회에서는 중간, 기말고사 때마다 시험 공부에 지친 학우들을 위해 간식을 나눠주는 간식 드리미 행사를 실시한다. 승환이는 시험 기간이 될 때마다 간식을 받을 생각에 두근두 www.acmicpc.net 접근 방식 스택을 활용해서 풀 수 있는 문제다. 주어진 입력을 순회하면서 크게 두 가지 경우로 나누어 처리해 주면 되는데 바로 현재 입력값이 now와 같은지 다른지이다. now는 1부터 시작하는 변수를 선언하여 해당 순서가 간식을 받을 때마다 1씩 증가시켜 주면서 다음 순서를 확인할 수 있게 해주는 변수다. 만약 현재 사람이 간식을 받을 순서가 맞다면 스택에 넣지 않고 그대로 now를 1 증가시켜 준 뒤에 남아있는 스택을 확인하면서 now와 일치하는 값이 ..
da9dac
'Java' 카테고리의 글 목록 (2 Page)