개발자 바다의 파도

개발의 무인도에 갇혔다

알고리즘 공부/프로그래머스 알고리즘

코딩테스트 입문 - 16일차 (C++)

개바파 2024. 2. 9. 03:56

16일차 - 문자열, 수학, 배열, 조건문

 

1번) 편지

 

 

     이번 문제는 간단하게 문자열 message의 길이를 2배를 answer에 대입하면 됩니다.

 

2번) 가장 큰 수 찾기

 

 

     이번 문제는 가장 큰 수와 그 큰 수의 인덱스를 출력하면 됩니다. 간단하게 13번줄 for문에 매 인덱스마다 기존 최대값인지 확인하고 최댓값인 경우 max로 최댓값을 설정하고, 그 때의 i를 idx에 저장합니다. 이후 22-23번줄에 max와 idx을 출력하면 됩니다.

 

3번) 문자열 계산하기

 

 

     이번 문제는 문자열 my_string에 숫자, 기호를 알아서 숫자의 식을 푸는 문제입니다. 일단 20번줄 for문에서 my_string에 스페이스 값 (' ')이 등장한 인덱스 값을 spaceIdx 배열에 저장합니다. 29번줄에는 마지막 식이 끝나는 위치를 spaceIdx에 알려줍니다. 31번줄 while문에 조건문은 spaceIdx, 즉 스페이스 값이 없는 경우에 끝나게 설정을 했습니다. 만일 현재 my_string에 숫자를 알려줘야 할 때면 isNum이 true, 기호를 알려줄 때는 isNum이 false입니다. 기본적으로 수의 식을 적을 때 숫자가 항상 먼저 나오니 초기값 isNum은 true입니다. 그리고 1번 while문을 돌 때마다 cnt값을 올려서 spaceIdx을 세줍니다.

     33번줄 if문은 isNum이 true일 때이며, 35번 for문 줄에는 현재 위치에서 스페이스 값이 나오는 인덱스 값까지 수를 구합니다. 이 때 수를 temp에 저장을 합니다. 이후 startIdx 값을 spaceIdx[cnt]에 저장을 하고 얻어낸 숫자를 백터 nums에 저장합니다. temp 값을 초기화하고 isNum을 false로 만듭니다. 반대로 isNum이 false인 경우는 기호를 알려주며 이는 + 또는 -입니다. 48번 for문줄에 이를 판단하고 equations라는 백터에 삽입을 합니다. 여기서도 startIdx를 설정을 합니다. 이후 isNum을 true로 바꿔줍니다. 68번줄은 equationCnt인 기호가 몇 개인지 기록을 하고, 70번 줄은 answer에 첫 숫자를 더해줍니다.

     72번줄 for문은 수를 더하거나 빼기를 하면서 주어진 num[i]와 equation[i]으로 값을 계산하고 answer을 반환하면 됩니다.

     다른 사람들의 풀이를 보면 더 간단하게 풀 수 있으니 그걸 참고하는 것도 좋습니다..

 

4번) 배열의 유사도

 

 

     이번 문제는 백터 s1와 s2에 있는 string끼리 값이 같은 것이 몇 개 있는지 확인하는 문제입니다. 간단하게 2중 for문으로 s1[i]와 s2[j]가 완전히 같은 경우 answer을 1씩 증가시키면 됩니다.

 

코드 복붙 주소 - https://github.com/ResToEons/ProgrammersAlgorithm/tree/main/%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8%20%EC%9E%85%EB%AC%B8/16%EC%9D%BC%EC%B0%A8