이코테-구현 (c++ string처리, c++ 슬라이싱, c++ isdigit() )

RostoryT·2022년 9월 2일
0

String and Implementation

목록 보기
12/18

럭키 스트레이트

메모

현재 캐릭터 점수 = N
자릿수를 기준으로 점수 N을 반으로 나눠, 왼쪽부분 합 + 오른쪽 부분 합이 동일한 상황에만 기술 사용 가능

ex)
n = 126402
왼쪽 = 1+2+3 오른쪽 = 4+0+2
두 합은 각각 = 6 ~> 럭키스트레이트!

현재 점수 n이 주어졌을 때, 럭키스트레이트를 쓸 수 있는지 없는지 알려줘라
~> 매우쉬운둣

알고리즘

슬라이싱 두 번해서
if sum() == sum():
return True

솔루션 코드 - 내가 푼

  • python
def solution(n):
    pivot = len(n)//2
    
    left = list(map(int, n[:pivot]))
    right = list(map(int, n[pivot:]))
    
    if sum(left) == sum(right):
        return True
    else:
        return False
    
n = input()
print("LUCKY" if solution(n) else "READY")

  • cpp
    • string이나 vector나 set 데이터 개수는 전부 .size()
    • string 각각의 원소를 int로 바꿀 땐, - '0' 를 해준다!
    • 파이썬 슬라이싱을 cpp에서 하려면 인덱스로 일일히 넣어주거나
    • string.substr(arr, k)를 사용
#include <bits/stdc++.h>
using namespace std;
void main(void) {

	string arr;
	cin >> arr;
	vector <int> left;
	vector <int> right;

	int len = arr.size();
	int pivot = len / 2;

	for (int i = 0; i < pivot; i++) {
		left.push_back(arr[i] - '0');
		right.push_back(arr[(len-1)-i] - '0');
	}
	
	int left_sum = 0, right_sum = 0;
	
	for (int i = 0; i < left.size(); i++) {
		left_sum += left[i];
		right_sum += right[i];
	}

	if (left_sum == right_sum)
		cout << "LUCKY" << endl;
	else
		cout << "READY" << endl;
}

솔루션 - 이코테

  • python

    • cpp코드처럼 짰음(슬라이싱 안함)
  • cpp

    • 내가 짠 코드랑 동일하나, 나는 불필요한 메모리를 낭비함
#include <bits/stdc++.h>

using namespace std;

string str;
int summary = 0;

int main(void) {
    cin >> str;

    // 왼쪽 부분의 자릿수의 합 더하기
    for (int i = 0; i < str.size() / 2; i++) {
        summary += str[i] - '0';
    }

    // 오른쪽 부분의 자릿수의 합 빼기
    for (int i = str.size() / 2; i < str.size(); i++) {
        summary -= str[i] - '0';
    }

    // 왼쪽 부분과 오른쪽 부분의 자릿수 합이 동일한지 검사
    if (summary == 0) cout << "LUCKY" << '\n';
    else cout << "READY" << '\n';
}

문자열 재정렬

메모

알파벳 대문자, 숫자(0~9)로 구성된 문자열 주어짐
모든 알파벳을 오름차순으로 출력하고
그 뒤에 숫자를 모두 더해서 출력

알고리즘

생각할것도 없다

하나씩 읽어와서 isdigit()함수로 숫자문자 구분

문자끼리 정렬한 결과 뒤에 숫자 붙여서 print

솔루션 - 내가푼

  • python
    • 마지막에 숫자값이 있는 경우에만 붙여줘야함! (0은 붙일필요 없으니까)
s = input()

num = 0
alpha = []

for i in s:
    if i.isdigit():
        num += int(i)
    else:
        alpha.append(i)
alpha.sort()

# (중요) 숫자가 있는 경우에만 붙여줄 수 있도록 해야함 -->이거땜에 틀림
if num != 0:
    alpha.append(str(num))

print("".join(alpha))

  • cpp
#include <bits/stdc++.h>
using namespace std;

void main(void) {
	string s;
	cin >> s;
	int num = 0;
	vector <char> alpha;

	for (int i = 0; i < s.size(); i++) {
		if (isdigit(s[i]))
			num += (s[i] - '0');
		else
			alpha.push_back(s[i]);		
	}

	sort(alpha.begin(), alpha.end());

	for (int i = 0; i < alpha.size(); i++) {
		cout << alpha[i];
	}
	if (num != 0)
		cout << num;
}

profile
Do My Best

0개의 댓글