목록완전탐색 (21)
N

완전 탐색으로 풀어야 한다. 문자열 형태의 숫자를 int형으로 바꿔서 저장하기 위한 vector num. 문자열 형태의 숫자를 저장하는 string n. 연산자의 위치를 나타내는 vector location. 연산자의 종류를 나타내는 vector exp. for문을 통해 expression을 순회한다. 만약 expression[i]가 연산자라면 num 벡터에 n을 int형으로 바꿔서 넣어준 후, n = ""으로 초기화 해준다. 그리고 exp 벡터에서 해당 연산자가 있는지 검사를 하여 중복이 없으면 exp에 넣어준다. location에는 해당 연산자의 위치를 넣어줘야 하기 때문에 i를 넣어주도록 한다. 만약 expression[i]가 연산자가 아니라면 숫자를 나타내므로 n += expression[i]를 ..
모든 블록을 계속 순회하여 없앨 수 있는 블록이 없을 때까지 while문으로 반복한다. 우선 bool형 변수 keep을 이용하여 없앨 수 있는 블록이 있는지 flag를 지정한다. bool형 배열 arr[30][30]을 while문에서 선언하여 모두 false로 초기화한다. arr 배열을 이용하여 블록을 없애고 정렬을 할 예정이다. 2중 for문을 이용하여 같은 블록이 있는 범위를 구하도록 하자. 만약 board[i][j]가 공백이라면 검사를 하지 않고 continue한다. 공백이 아니라면 해당 문자를 target으로 삼고, 주변 4블록이(현재 자기 자신 포함) target과 같은지 검사한다. 4개의 블록이 모두 같으면 arr배열의 해당 위치를 true로 바꿔주고 keep 또한 true로 바꿔준다. 더불어..

완전 탐색으로 문제를 풀었다..! 우선 카펫의 총 격자수를 sum과 current에 저장하고, while문으로 current > 1 일 때까지 반복하였다. while문 내부) 우선 sum의 약수를 구해야 하기 때문에 sum % current == 0인 수만 찾도록 한다. row는 나누려고 하는 수, col은 sum / current를 했을 때의 몫이다. 그러면 row * col == sum 이므로 약수가 된다. 약수를 구했다면 이제 brown과 yellow의 개수가 맞는지 확인해야 한다. 우선 col > 1이여야 한다. 왜냐하면 yellow의 개수를 구할 때 col - 2 를 해야하는데 음수가 나오면 안되기 때문이다. 그리고 문제에 나와있듯이 가로의 길이는 세로 길이와 같거나 길다고 하였기 때문에 row..

우선 numbers를 내림차순으로 정렬을 하도록 하였다. 그러면 numbers의 최대값이 나오고, int형으로 변환하여 max 변수에 저장하였다. 그리고 for문과 전역변수로 선언한 prime 배열을 이용하여 2 ~ max 사이에 있는 소수를 false로 바꿔주도록 한다. (for문과 배열을 이용하여 소수 찾는 형태는 외워두면 알고리즘 문제에서 유용하게 쓸 수 있다..!) for(int i = 2; i
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5,... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5,... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5,... 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요. 완전..