[Week 4] #1541 self review - yujungee
Opened this issue · 0 comments
yujungee commented
#1541 self review
- 파일명: algo_2022/#1541.cpp, algo_2022/#1541.ipynb (branch - yujungee) 코드 비교 추천
- 수행시간: cpp - 0ms, py - 68ms
- 메모리: cpp - 2024KB, py - 30864KB
1. 문제 해결 과정
c++로 풀다가 너무 오랜만에 쓰는 함수들이라 검색해보느라 시간이 오래걸렸다. (이럼 안되는데..)
일단 문제의 핵심은 파악하기 쉬웠다. 사실 예전에 풀었던 문제라 금방 생각이 났을 수도..
문제의 핵심은 -
를 기준으로 쭉 빼주는 방법이다.
-
를 기준으로 그룹을 만들어서 그룹 안에 있는 애들은 다 더하기거나 숫자 하나인 경우니까 다 더해준다.
그리고 첫번째 그룹에서 나머지 그룹을 쭉 빼주면 된다.
c++ 로 풀었을 때,
- 문자열을
strtok
을 이용해-
를 기준으로 먼저 나누어vector
에 집어넣는다. vector
안의 문자들을 다시+
를 기준으로 나누어야 하는데vector
안의 문자들은string
이고strtok
을 적용하려면char
이어야 한다.- 따라서
strcpy
함수를 이용해string
을char
로 변환한다. +
를 기준으로 나눈다.
+
를 기준으로 나누어준 숫자는 모두 더해준다. 이때 첫번째 그룹이면 temp에 먼저 저장을 하고 나머지 그룹들은 temp에서 빼서 다시 temp로 저장한다.
마냥 strtok
로 쪼개면 된다고 생각했는데 데이터 타입을 간과해서 시간이 오래 걸렸다. 그리고 함수 사용법이 너무 서툴렀다.
그래서 데이터 타입을 좀 무시해보자 해서 python으로 풀어봤는데 정말 푸는데 5분도 안걸린 것 같다. 10줄 정도 썼나..
split
함수를 사용해서 바로바로 잘라주고 값을 구하는 건 c++ 3번과 똑같이 풀어줬다.
2. 아이디어
c++ : strtok, strcpy
python : split
3. 코드 설명
cpp
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
int main(){
char expression[51] = ""; // 식을 받아줄 문자열
cin >> expression;
vector<string> expre; // -를 기준으로 잘라서 넣어줄 벡터
char *ptr = strtok(expression, "-"); //첫번째 strtok 사용.
while (ptr != NULL) //ptr이 NULL일때까지 (= strtok 함수가 NULL을 반환할때까지)
{
expre.push_back(ptr);
ptr = strtok(NULL, "-"); //자른 문자 다음부터 구분자 또 찾기
}
// 여기까지가 -로 자르기
int cnt=0; // +그룹을 더할 변수
int temp=0; // 최종 값을 나타내는 변수
char ch[51];
for (int i=0; i<expre.size(); i++) {
cnt = 0; // 그룹마다 cnt를 구해줘야 하므로 for문 마다 초기화
strcpy(ch, expre[i].c_str());
char *ptr2 = strtok(ch, "+"); //첫번째 strtok 사용.
while (ptr2 != NULL) {
cnt += stoi(ptr2);
ptr2 = strtok(NULL, "+");
} // 한 - 그룹을 다시 + 로 나눠서 더함.
if (i==0) { // 첫번째 - 그룹이면 temp를 cnt로 정해줌
temp = cnt;
}
else temp = temp - cnt; // 그 다음부터는 temp에서 계속 빼준다.
}
cout << temp<< endl;
return 0;
}
py
minus = expression.split('-') # - 를 기준으로 나눈다.
for i in range(len(minus)): # -의 길이만큼
plus = minus[i].split('+') # minus[i]번 째를 다시 + 로 나눠서 더해준다.
cnt = 0 # 그룹마다 초기화
for j in plus:
cnt += int(j) # cnt 구하기
if i == 0: # 처음 -그룹이면 cnt가 temp
temp = cnt
else: temp = temp-cnt # 그 다음부턴 temp에서 계속 빼준다.
print(temp)