1) 생각 주어진 2개의 10만 자리의 bit를 가지고 bit연산 출력을 하여라. 처음 생각java에는 딱히 bit를 받을 만한게 없는것 같으므로(모르는것일 가능성이 높다.) 배열을 사용해서 String으로 받은 뒤 한자리 씩 배열에 넣어주었다. 다음 생각별 생각없이 ~A와 ~B를 비트 연산 ~ 처리를 해줬더니 - 값이 나왔다. 보수가 적용된 것이다. 2) 방안 1) - 값이 나오는 것을 방지하면서 원래 bit의 0과 1을 flip하기 위해서 1과의 ^(or) 연산을 사용하였다. or 연산은 01과 10일 경우 1 그외의 00 11은 0의 결과를 나타내므로 원본 bit를 뒤집은 효과를 낼 수 있다. 12345678910111213141516171819202122232425262728293031323334..
1) 생각 N x M의 크기의 체스판을 만들 판이 주어진다 판들은 1x1의 크기로 W(흰색)과 B(검은색)으로만 이루어져있다.판에서 8 x 8을 떼어내어 체스판을 만들 때, 최소한으로 바꿔야하는 W와 B의 개수를 구하여라. 처음 생각8 x 8을 분리하여 그 판의 왼쪽 맨 위에서부터 다음 판과 색이 같은지 판단하여 다르다면 임시변수 temp에 다음 판의 색을 저장하고 있고,색이 같다면 카운트 변수를 +1 시켜준 후 temp의 색을 바꿔준다.(BBB 일경우 temp의 색을 바꿔주지 않으면 앞 뒤로 중복 카운트가 된다.)▶시뮬레이션 유형의 문제는 일단 문제가 길기 때문에 문제를 제대로 보지 못할 아니 않을 가능성이 크다. 이 문제의 경우에는 문제속에 힌트를 많이 주고 있다.▶문제의 마지막에 큰 힌트가 주어져있..
1) 생각 시험 장의 수와 각 시험장의 인원 그리고 대표감독이 관리할 수 있는 학생수 B와 부 감독이 관리 할 수 있는 학생수 C를 준다. 대표감독은 각 시험장마다 1명만 있을 수 있고 부 감독은 여러명 있을 수 있다. 이때 필요한 최소의 감독수를 구하여라. 처음 생각백준에 있는 삼성 SW 역량 테스트 기출문제이다. 정답 비율이 23%인데 풀고나니 왜 23%인지를 잘 모르겠다.▶ 범위가 문제였다고해도 50%는 거뜬히 넘어야 될 것같다. 백준 서버에서 잠시동안 채점 오류가 있었던게 아닌지 조심스럽게 생각해본다. 다음 생각대표감독은 1명 있을 수 있고 부 감독은 여러명 있을 수 있다. 대표 감독은 무조건 있어야 하므로 무조건 처음에 계산을 해준다. 다다음 생각대표 감독이 처리할 수 있는 학생수를 제외하고 나..
1) 생각 입력은 주어지지 않는다 "문제의 정답"을 출력해라. 처음 생각백준 문제들은 간혹가다 이렇게 재밌는 문제들이 섞여있어서 도전하는 맛?? 이 있는것 같다. 2) 방안 1) 문제 그대로 "문제의 정답"을 출력하였다. 12345678import java.io.IOException; public class Main{ static int[] arr = new int[21]; public static void main(String[] args) throws IOException{ System.out.println("문제의 정답"); }}Colored by Color Scriptercs
1) 생각 주어진 명령대로 집합을 만들고 CHECK 명령어가 들어오면 해당 숫자가 있으면 1 없으면 0을 출력해라. 처음 생각중복으로 들어와도 1번으로 처리되기 때문에 HashSet 자료구조를 사용하여 구현했었다. 2) 방안 1) 숫자가 20으로 제한되어 있고, 모두 삭제하는 명령어와 모두 집어넣는 명령어가 있기 때문에 배열을 만들어 Arrays.fill() 메소드를 이용하여 HashSet을 사용했을 때보다 시간을 절약하였다. 2) 풀이를 살펴보니 비트마스크를 사용하신 분들이 있었는데 이경우는 더 빠르고 효율적으로 돌아갈 것 같다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344import java.io.Buf..
1) 생각 알파벳이 각각 적혀있는 R행 C열이 주어졌을 때, (0,0)에서 출발하여 알파벳이 중복되지 않게 최대한 갈 수 있는 칸을 출력하라. 처음 생각칸을 나아가야 하므로 DFS를 풀이를 해야한다고 생각하였다. 지나간 길에있는 알파벳이 딱 한 번만 나와야 하므로 String 변수에 해당 알파벳을 더해가면서 contains 메소드를 통해 이번에 탐색한 알파벳이 이전에 있었는지 검사하였다.▶ String 객체를 넘겨주면 검사를 하다보니 시간과 메모리를 크게 잡아먹었다. ▶ 시간도 그렇고 메모리도 18배 정도 차이가 난다. 2) 방안 1) String으로 된 매개변수를 없애고 boolean형 visited 배열을 만들어 주어 해당 알파벳의 위치를 체크하였다.▶ 다음 탐색을 위해 해당 재귀가 종료될 시 fal..
1) 생각 가중치가 없는 방향 그래프가 주어졌을 때, 해당 Vertex에서 다른 Vertex로 갈 수 있는지 여부를 파악해서 갈 수 있다면 1로 표시 없다면 0으로 표시하여 출력하라. 처음 생각DFS를 통해 방문표시를 해가면서 탐색하면 되는 문제라고 생각하고 제출 하였지만... 시간 초과의 늪에 빠지고 말았다. 예제는 아주 잘되는데 머가 문제였을까... 정말 많이 고민했지만 계속되는 시간초과.. 2가지의 문제점이 있었다. 2) 방안 1) DFS 시작의 문제점. 모든 Vertex을 탐색하기 위해서 처음에는 2중 반복문을 통해 해당 Index가 1의 값을 가지고 있으면 거기서 부터 탐색을 시작하였다. => 결론은 해당 Vertex에서 다른 Vertex들을 갈 수 있냐의 문제로 일단 해당 Vertex를 집어넣..
1) 생각 체스판에 N개의 Queen을 겹치지 않는 범위로 놓을 수 있는가에 관한 문제이다.백 트래킹이라하는 알고리즘의 대표적인 문제로 볼 수 있다. 모든 경우의 수를 따져보면서 중간에 아니다 싶으면 백 해서 다시 맞나 살펴보는 형태의 알고리즘이다. 따라서 해당 경로를 방문 표시 할 수 있는 배열을 만들어 주었다.NxN 크기의 배열을 만들어서 진행을 하였는데 다른 풀이들을 보니 1차 배열로도 문제를 풀 수 있는것 같다. 이경우는 좀 더 빠르게 문제를 해결할 수 있을 것이다. 2) 방안 백트래킹을 하며 Queen을 한 줄에 하나씩 놔보면서 진행한다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445import ..
1) 생각기간 N이 주어지고 N일동안 날마다 할 상담의 보수와 상담에 걸리는 시간이 주어질 때, 최대 보수를 구하는 문제이다.이전에 SW Expert Academy에서 풀었던 [SW Expert] 5215번 햄버거 다이어트 문제와 유사하다.다른 점이 있다면 시간을 신경써줘야 한다는 점이다.2) 방안 해당 날짜에 상담을 시작하면 주어진 시간 만큼 상담을 하지 못하므로 Index 번호를 해당 날짜에 주어진 상담 기간 만큼 늘려주어 해결하였다. 123456789101112131415161718192021222324252627282930313233import java.io.IOException;import java.util.Scanner; public class Main{ static int n; static ..
1) 생각 숫자 n이 주어지면 1, 2, 3을 더해가면서 n이 만들어 질 수 있는 개수를 구하여라. 처음 생각문제 분류를 보면 다이나믹 프로그래밍으로 되어있으나 n의 범위가 11보다 작으므로 완전 탐색을 이용해서 풀었다. 2) 방안 더하고 있는 값이 n보다 커질 경우 탐색에 의미가 없으므로 return 해주었다. 12345678910111213141516171819202122232425262728293031import java.io.IOException;import java.util.Scanner; public class Main{ static int n; public static void main(String[] args) throws IOException { Scanner sc = new Scanne..
- Total
- Today
- Yesterday