목록kakao (40)
N
모든 블록을 계속 순회하여 없앨 수 있는 블록이 없을 때까지 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로 바꿔준다. 더불어..
먼저 str1과 str2를 두 글자씩 끊어서 각각 s1, s2 벡터에 넣어주도록 한다. 그러기 위해서는 str1과 str2을 모두 대문자나, 소문자로 바꿔주어야 한다. 그래서 transform() 함수를 이용하여 두 글자 모두 소문자로 바꿔주었다. 그리고 각각 for문을 이용하여 2글자씩 끊고, 두 글자 모두 알파벳인 경우 s1, s2에 넣어주었다. 만약 for문을 다 돈 후에 s1, s2가 모두 비어있으면 65536을 바로 리턴해준다. 아니라면 max변수에 s1.size() + s2.size()를 대입한다. (max = 합집합, min = 교집합을 나타낸다..! 변수명 오류..ㅎㅎ) s1, s2의 크기를 비교하여 교집합의 개수를 구하는 for문을 수행하고, max -= min을 해주면 합집합의 개수가 ..
문자열을 int형으로 바꿔서 문제를 풀어야 한다. 우선 괄호와 ',' 때문에 조건을 많이 걸어야 했다. 2차원 int형 벡터 v와 1차원 int형 벡터 num, string을 int로 변환하기 위한 임시 변수 tmp가 핵심이다. for문은 1 ~ s.size() - 1까지 반복하도록 하였다. s의 맨 처음 괄호와 맨 끝 괄호는 고려하지 않아도 되기 때문이다..! 튜플을 구분하기 위한 괄호를 이용하여 flag를 썼다. if(open == false && s[i] == '{') open = true; 각 튜플이 시작되면 open을 true로 바꿔주었다. 이후 '}'가 나올 때까지 해당 튜플의 수를 int로 바꿔준다. s[i]가 숫자라면 tmp에 넣어주면 된다. 만약 s[i]가 ','가 나온다면 tmp를 st..
BFS를 이용하여 문제를 풀었다. 이중 for문을 사용하여 picture 벡터를 순회하였다. bfs함수를 통해 순회한 위치에는 -1을 넣어 탐색하지 않도록 설정한다. 현재 picture[i][j]가 0이거나 -1이면 무시하도록 하자..! 0, -1이 아니면 영역의 수를 나타내는 number_of_area를 1씩 늘려주고, 현재 picture[i][j] 원소의 개수를 bfs 함수를 통해 세어본다..! bfs(int m, int n, int x, int y, vector& picture, int target) --> m과 n은 그림의 크기, x와 y는 현재 순회하고 있는 인덱스, picture는 그림. 우선 종료조건을 만들어주자..! x ,y 가 0보다 작거나 x, y가 각각 m, n과 같거나, target..
우선 answer에 s.size()를 넣어주어 최댓값으로 설정한다..! 이중 for문 중에서 첫 번째 for문은 자를 문자의 개수를 나타낸다. cnt 변수는 같은 문자의 개수를 나타내고, tmp 변수는 압축한 문자열의 총 크기를 나타낸다. current 문자열은 s[0] ~ s[i]개 까지 자른 문자열을 나타낸다. 두 번째 for문에서는 s 문자열에서 current와 같은 문자열이 있는지 확인하는 반복문이다. current == s.substr(j, i)가 같다면 cnt++을 해준다. 만약 두 문자열이 같지 않다면 tmp에 자른 문자열의 길이를 더해준다. 이때, cnt가 1이라면 자른 문자열의 길이만 더해주고, 1이 아니라면 cnt를 문자열로 변환했을 때의 길이 + 자른 문자열의 길이를 더해준다. (같은..
string 형태로 점수가 들어온다. 가장 크게 분리해야 할 것은 1) 숫자 2) 알파벳('S', 'D', 'T') 3) 보너스('*', '#') 로 분리를 하여 점수를 합산해야 한다. score는 현재 처리하고 있는 점수, prev는 보너스 점수를 처리하기 위해 이전 점수를 저장한 변수이다. 1) 숫자 숫자는 0 ~ 10 사이의 점수로 dartResult[i] 번째에 있는 문자가 0 ~ 9 사이인지 판별한다. 그리고 dartResult[i + 1]이 0이면 점수는 10점이 되므로 score에 10을 저장 후 i++, 아니라면 0 ~ 9 에 해당하는 점수를 score에 저장한다. 2)알파벳('S', 'D', 'T) dartResult[i] 가 'S' or 'D' or 'T' 인지 판단한다. 'S'는 sc..
우선 실패율을 저장하기 위해 double형 벡터 rate를 선언하였다. 이중 for문을 이용..! 스테이지를 나타내는 i, stages의 인덱스를 나타내는 j 이다. user는 해당 스테이지를 클리어한 사람의 수를 나타내고, count는 i번째 스테이지에서 실패한 사람의 수를 나타낸다. 만약 count가 0이면 해당 스테이지에 도달한 유저가 없다는 뜻으로 0을 rate에 넣어주고, count가 0이 아니면 count / user 의 결과값을 rate에 넣어준다. 그리고 user -= count를 통해 유저의 수를 조정한다. 모든 스테이지의 실패율을 구했으면 실패율을 내림차순으로 나열했을 때의 스테이지 번호를 answer에 넣어주어야 한다. 약간(?) 헷갈릴 수 있는 부분이다. auto itr = max_..
문제의 핵심은 OR 연산을 이용하는 것..! arr1과 arr2의 i번째에 있는 두 수를 or연산을 통해 arr1[i] 번째에 다시 저장한다. 이때 string형 tmp를 선언한다. OR 연산을 통해 나온 결과를 이진법을 통해 해석해야 한다. 2로 나누었을 때 나머지가 0이면 ' '(공백)을 tmp에 넣어주고, 나머지가 1이면 '#'을 tmp에 넣어준다. 이때, tmp의 사이즈는 n이어야 한다..! while문을 통해 n만큼 문자를 넣어주고, answer에 넣기 전에 reverse를 통해 tmp를 뒤집어주었다. (tmp에 거꾸로 들어가기 때문에 바로잡기 위해 reverse() 함수를 사용하였다..!) 이 문제에서 많이 틀리는 부분이 아마 해석한 결과의 길이와 n이 같지 않아서일 것 같다..! n의 길이만..