목록문자열 (72)
N
조건이 까다로운 문제였다... 우선 문자열에서 #이 붙은 음을 다른 문자로 치환을 하여야 한다. 이 부분이 첫번째 난관이다. 본인은 맵을 이용하여 다른 문자로 치환하였다. C#, D#, F#, G#, A#을 겹치지 않은 문자로 맵에 넣어주었다. 그리고 change() 함수를 따로 정의해서 musicinfos에 들어있는 멜로디와 m의 문자열을 #을 없앤 문자로 바꿔주었다. change함수는 별로 어렵지 않으니 쉽게 따라갈 수 있을 것이다..! 이제 musicinfos를 분해해야 한다..! 우선 시간을 나눠야 한다. bHour = 재생 시작된 시, bMin = 재생 시작된 분, aHour = 재생 끝난 시, bMin = 재생 끝난 분, time = 재생된 시간(분), bTime = 이전 곡의 재생된 시간(분..
주어진 문자열을 나누고, 맵을 이용하는 것이 핵심인 문제..! 우선 유저가 어떤 상태인지 확인하는 state 벡터를 선언하고, 해당 유저의 닉네임을 확인하기 위해 형 map인 user를 선언하였다. (state는 Enter, Leave, Change) record의 크기만큼 for문을 돈다. 우선 record[i]를 tokenize 하여 문자열을 나누도록 한다. 문자열을 나눈 결과를 str[3]에 각각 (state, id, nickname)을 저장하도록 하였다. str[0]을 확인하여 Enter인 경우 state에 "님이 들어왔습니다."를 넣어주고, 해당 id의 닉네임을 주도록 한다. Leave인 경우 "님이 나갔습니다."를 state에 넣어주도록 한다. 마지막으로 Change인 경우 해당 id의 nic..

먼저 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..

문자열로 들어온 값 중에서 최댓값과 최솟값을 찾아야 한다. 우선 문자열을 int 형태로 바꿔줘야 한다. 그리고 공백 문자를 제외하고 숫자만 가져와야 하기 때문에 token을 이용하여 문자열을 나누었다. for문이 token을 이용하여 공백을 제외하고 숫자만 받아와 int 형태로 v벡터에 넣어주고 있는 부분이다. 모든 숫자를 가져왔으면 sort()를 통해 오름차순으로 정렬을 해준다. 그러면 v.front()는 최솟값, v.back()은 최댓값이 되므로 to_string()으로 int를 string형태로 바꿔주고 알맞게 answer에 넣어주면 끝..! #include #include #include #include #include using namespace std; string solution(string..

문자열의 대소문자를 변환해주는 toupper()와 tolower() 함수를 이용하였다. toupper()는 대문자로, tolower()는 소문자로 변환해준다..! 해당 문자가 알파벳인 경우 알맞게 변환해주고, 알파벳이 아닌 경우는 문자 그대로 리턴되기 때문에 이 특징을 살려서 함수를 사용하였다. 그리고 문자의 위치를 나타내는 index를 선언하였고, index가 0인 경우는 대문자로 변환해준다. 우선 s.size()만큼 반복하자. s[i]가 공백인지 아닌지를 검사해야 한다. 공백은 그대로 넣어주고, 공백 다음 문자는 JadenCase이기 때문에 index = 0으로 바꿔준다. 만약 공백이 아니라면 해당 문자는 알파벳이다. 그러면 index를 검사하여 0인지 아닌지 판단한다. 0이면 toupper(s[i]..

우선 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를 문자열로 변환했을 때의 길이 + 자른 문자열의 길이를 더해준다. (같은..

단어 별 인덱스의 따라 대소문자로 변환하는 문제..! 대문자로 변환해주는 toupper()함수와 소문자로 변환해주는 tolower()함수를 이용하면 쉽게 풀 수 있다. 또한 단어마다 0번째 인덱스부터 시작하니 이것만 처리해주면 풀 수 있는 문제..! count 변수를 이용하여 단어의 인덱스 위치를 체크해주고, 띄어쓰기가 나오면 count를 0으로 초기화하여 새로운 단어의 인덱스부터 시작한다..! #include #include using namespace std; string solution(string s) { string answer = ""; int count = 0; for(int i = 0; i < s.size(); i++) { if(s[i] == ' ') { count = 0; answer.p..