현재 문자(i)와 다음 문자(i+1)을 비교하여 둘이 같을때는 신경쓰지 않고
달라질때 현재 문자(i)가 이미 방문했던 문자인지
알파벳 개수 만큼 있는 check배열을 확인하여
이미 방문했던 문자였으면(true이면) 현재 문자(i)는 떨어져 있는 문자이므로
그룹 문자가 아니다.
처음엔 문제를 이해하는 것도 힘들었다ㅠㅠ 1부터 n까지 수로 입력받는 수열을 만드는 것이다. (스택의 push, pop을 사용해서!) 나는 거꾸로 주어진 수열을 1부터 n까지의 수로 만들었다. 거꾸로 생각하는거니까 비디오 되감기하는 것처럼 생각해보면, 인덱스를 0부터 증가하면서 처리하는게 아니라 n부터 감소하면서 진행해야할 것이다. 하지만 나는 그렇게 하면 너무 복잡하다 생각해서 스택의 특성을 이용해서 주어진 수열을 거꾸로 뒤집었다. 다 push하고 다 pop했다. (이때 pop는 return형식이 void이므로 top으로 다시 배열에 저장한뒤 pop해주었다.) 아무튼 주어진 수열이 뒤집어진 형태의 배열을 가지고 처리를 시작한다. 원래는 1~n → 수열 인데 나는 뒤집어진 수열을 가지고 거꾸로 진행하는 거니까 생각해보면 뒤집어진 수열 → n~1 이렇게 된다. 일단 target을 n으로 저장해놓고 뒤집어진 수열이 저장되어있는 배열을 인덱스 0부터 차례대로 스택에 push한다. push하고 스택에 있는 top이 target과 같으면 pop하도록 했다. 이런식으로 하면 n~1의 순서로 pop이 된다. 위와 같은 처리 과정에서 push할땐 문제와 반대로 '-'를, pop할땐 '+'를 ans라는 스택에 순서대로 쌓아주었다. 이것마저도 스택에 쌓는 이유는 이것도 거꾸로 나오기 때문에 나중에 뒤집어주기 위해서다. 잘 진행이 되서 n~1이 잘 되면 스택은 비어있을 것이고 만들어지지 않는다면 스택은 비어있지 않을 것이다. 그래서 스택에 뭐가 남아있으면 만들어지지 않았다는 얘기니까 NO를 출력하고 return했다. 코드↓ https://github.com/ziwonii24/Algorithm/blob/master/Baekjoon/1874.cpp
getline으로 string을 입력받고 공백이 있으면 cnt를 증가시켰다. 그러나 문자열의 앞과 뒤에 공백이 있을 수 있다하였으므로 이때에는 cnt를 감소시켰다. 출력할때에는 공백의 개수 + 1을 하였다. 코드 ↓ https://github.com/ziwonii24/Algorithm/blob/master/Baekjoon/1152.cpp
1~99까지는 등차수열이기 때문에 개수를 1씩 증가해주고 100~1000은 자리수 별로 비교하여 증가하여야 한다. 먼저, string으로 변환하여 미리 diff에 맨앞 두 자리수의 차이(sn[1]-sn[0])를 구해놓은다음, 그 다음 자리수의 차이(sn[i+1]-sn[i])가 diff와 같으면 cnt를 증가시켜주었다. 1000을 입력했을 때 답은 144가 나와야한다. 코드 ↓ https://github.com/ziwonii24/Algorithm/blob/master/Baekjoon/1065.cpp
댓글
댓글 쓰기