-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[브루트포스] 9월 13일 #4
base: main
Are you sure you want to change the base?
The head ref may contain hidden characters: "04_\uBE0C\uB8E8\uD2B8\uD3EC\uC2A4"
Changes from all commits
bd196d3
35511c2
679bc5a
f8de248
5814884
fc87e42
44421e7
123715f
f87a4d2
842efc5
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
{ | ||
"files.associations": { | ||
"utility": "cpp" | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,134 @@ | ||
#include <vector> | ||
#include <iostream> | ||
#include <algorithm> | ||
#include <string> | ||
|
||
using namespace std; | ||
int isValid(string kd, string dis) { | ||
char s, n; | ||
|
||
n = kd[1]; | ||
s = kd[0]; | ||
|
||
if (s == 'A') { | ||
if (n == '1') { | ||
if (dis == "L" || dis == "B" || dis == "LT" || dis == "RB" || dis == "LB") | ||
return 0; | ||
} else if (n == '8') { | ||
if (dis == "L" || dis == "T" || dis == "RT" || dis == "LT" || dis == "LB") | ||
return 0; | ||
} else if (n > '1' && n < '8') { | ||
if (dis == "L" || dis == "LT" || dis == "LB") //이거 위에거 복붙해서 범위 오류로 실행과 동시에 실패 했었음 | ||
return 0; | ||
} else { | ||
return 1; | ||
} | ||
} else if (s == 'H') { | ||
if (n == '1') { | ||
if (dis == "R" || dis == "B" || dis == "RT" || dis == "RB" || dis == "LB") | ||
return 0; | ||
} else if (n == '8') { | ||
if (dis == "R" || dis == "T" || dis == "LT" || dis == "RT" || dis == "RB") | ||
return 0; | ||
} else if (n > '1' && n < '8') { | ||
if (dis == "R" || dis == "RT" || dis == "RB") | ||
return 0; | ||
} | ||
} else if (n == '1') { | ||
if (s > 'A' || s < 'H') { | ||
if (dis == "B" || dis == "RB" || dis == "LB") | ||
return 0; | ||
} | ||
} else if (n == '8') { | ||
if (s > 'A' || s < 'H') {//이거 범위 반대로 줘서 실행하자마자 실패 | ||
if (dis == "T" || dis == "RT" || dis == "LT") | ||
return 0; | ||
} | ||
} | ||
|
||
return 1; | ||
} | ||
|
||
|
||
string move(string ori, string dis){ | ||
char s, n; | ||
|
||
n=ori[1]; | ||
s=ori[0]; | ||
|
||
if(dis=="R"){ | ||
s++;} | ||
else if(dis=="L"){ | ||
s--;} | ||
else if(dis=="B"){ | ||
n--;} | ||
else if(dis=="T"){ | ||
n++;} | ||
else if(dis=="RT"){ | ||
s++; | ||
n++; | ||
} | ||
else if(dis=="LT"){ | ||
s--; | ||
n++; | ||
} | ||
else if(dis=="RB"){ | ||
s++; | ||
n--; | ||
} | ||
else if(dis=="LB"){ | ||
s--; | ||
n--; | ||
Comment on lines
+67
to
+81
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. p3. 두개의 문자로 이루어진 방향표시는 각각 알파벳 두 개의 방향표시로 나누어 생각할 수 있죠! 코드를 줄일 방법은 없을까요? |
||
} | ||
string result=string(1,s)+string(1,n); | ||
return result; | ||
} | ||
|
||
vector<string> chessClac(string kd, string sd, vector<string> s){ | ||
vector<string> dis(2); | ||
string tmp; | ||
for(int i=0; i<s.size(); i++){ | ||
if(isValid(kd, s[i])){ | ||
tmp=move(kd, s[i]);} | ||
else | ||
continue; | ||
if(tmp==sd){ | ||
if(isValid(sd, s[i])){ | ||
kd=tmp; | ||
sd=move(sd, s[i]); | ||
} | ||
} | ||
else{ | ||
kd=tmp; | ||
} | ||
} | ||
dis[0]=kd; | ||
dis[1]=sd; | ||
|
||
return dis; | ||
} | ||
|
||
int main() | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 가벼운 main 함수 좋습니다! |
||
{ | ||
//변수선언 | ||
string kd, sd; | ||
int N; | ||
vector<string> dis(2); | ||
|
||
//입력 | ||
cin>>kd>>sd; | ||
cin>>N; | ||
|
||
vector<string> s(N); | ||
for(int i=0; i<N; i++){ | ||
cin>>s[i]; | ||
} | ||
|
||
//연산 | ||
dis=chessClac(kd, sd, s); | ||
|
||
//출력 | ||
cout<<dis[0]<<"\n"<<dis[1]; | ||
|
||
return 0; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
#include <iostream> | ||
#include <sstream> | ||
#include <vector> | ||
#include <string> | ||
|
||
using namespace std; | ||
|
||
|
||
void add(int& ans, int value){ | ||
ans=ans|(1<<value); | ||
} | ||
|
||
void remove(int &ans, int value){ | ||
ans=ans&~(1<<value); | ||
} | ||
|
||
void check(int& ans, int value){ | ||
if (ans&(1<<value)) { | ||
cout << "1\n"; | ||
} | ||
else { | ||
cout << "0\n"; | ||
} | ||
} | ||
|
||
void toggle(int& ans, int value){ | ||
ans^=(1<<value); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 비트연산자 활용 아주 좋습니다👍👍 |
||
} | ||
|
||
void all(int& ans){ | ||
ans=(1<<21)-1; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 의미를 명확히 하기 위해서 |
||
} | ||
|
||
void empty(int& ans){ | ||
ans=0; | ||
} | ||
|
||
int main() | ||
{ | ||
ios_base::sync_with_stdio(false);//이거 안썼더니 계속 시간초과 났다. | ||
cin.tie(0); | ||
|
||
int n; | ||
int ans=0; | ||
|
||
cin>>n; | ||
|
||
cin.ignore(); | ||
|
||
//연산 | ||
string key; | ||
int value; | ||
|
||
for(int i=0; i<n; i++){ | ||
cin>>key; | ||
|
||
if (key == "add") { | ||
cin>>value; | ||
add(ans, value); | ||
|
||
} | ||
else if (key == "remove") { | ||
cin>>value; | ||
remove(ans, value); | ||
} | ||
else if (key == "check") { | ||
cin>>value; | ||
check(ans, value); | ||
} | ||
else if (key == "toggle") { | ||
cin>>value; | ||
toggle(ans, value); | ||
} | ||
else if (key == "all") { | ||
all(ans); | ||
} | ||
else if (key == "empty") { | ||
empty(ans); | ||
} | ||
} | ||
return 0; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
#include <vector> | ||
#include <iostream> | ||
#include <algorithm> | ||
#include <string> | ||
|
||
using namespace std; | ||
|
||
int findEnd(int N){ | ||
int n=665, count=0; | ||
string s; | ||
while(count!=N){ | ||
s=to_string(n); | ||
for(int i=0; i<s.size()-2; i++){ | ||
if(s[i]=='6' && s[i+1]=='6' && s[i+2]=='6'){//string vector에서 문자 비교하고 싶을 때 "" 쓰면 pointer error 발생!! | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. n을 string으로 바꾸지 않아도 666을 찾을 수 있어요! 한 정수가 주어져있울 때 각 자릿수를 접근하고 싶을 때 이 숫자를 10씩 나눠가며 나머지를 확인했던 거 기억하시나요? 여기서도 마찬가지로, 대신 666이라는 세자리 숫자를 확인해야 하니 1000으로 나눴을 때의 나머지를 확인하면 666의 존재를 찾을 수 있어요! 샘플 코드에는 이 방식으로 풀이가 되어 있으니 한 번 확인해보셔도 좋을 것 같습니다😁 |
||
// '7' 이런식으로 작은 따옴표 사용해줘야 한다. 문자열 비교하고 싶으면 .compare함수 사용하기 | ||
count++; | ||
break; | ||
} | ||
} | ||
n++; | ||
} | ||
return --n; | ||
|
||
|
||
} | ||
|
||
int main() | ||
{ | ||
int N; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P3. 변수의 표기법을 통일해주세요! 변수에서는 스네이크 표기법을 함수에서는 카멜 표기법을 사용하기로 정하고 변수에서 다른 표기법을 사용하실 경우 혼돈이 올 수 있어요😂 알튜비튜에서는 변수명에는 스네이크 표기법을, 상수명에는 대문자를, 함수명에는 카멜 표기법을 사용하도록 권고드리고 있습니다😊 |
||
|
||
//입력 | ||
cin>>N; | ||
|
||
int result=findEnd(N); | ||
//연산 | ||
cout<<result; | ||
|
||
return 0; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
#include <vector> | ||
#include <iostream> | ||
#include <algorithm> | ||
#include <string> | ||
|
||
using namespace std; | ||
|
||
int result(int N, int count){ | ||
int sum=0, result=0; | ||
string s; | ||
|
||
s=to_string(N); | ||
for(int j=0; j<s.size(); j++){ | ||
sum+=stoi(string(1,s[j])); | ||
} | ||
|
||
if(sum<=9*count){//등호가 들어가도 되나? | ||
sum=0; | ||
for(int i=1; i<N; i++){ | ||
s=to_string(i); | ||
for(int j=0; j<s.size(); j++){ | ||
sum+=stoi(string(1,s[j])); | ||
} | ||
sum+=i; | ||
if(sum==N){ | ||
result=i; | ||
break; | ||
} | ||
sum=0; | ||
} | ||
} | ||
else{ | ||
for(int i=N-count*9; i<=N-1; i++){//i<0일경우 invalid_argument 문제 발생 | ||
s=to_string(i); | ||
for(int j=0; j<s.size(); j++){ | ||
sum+=stoi(string(1,s[j])); | ||
} | ||
sum+=i; | ||
if(sum==N){ | ||
result=i; | ||
break; | ||
} | ||
sum=0; | ||
} | ||
} | ||
|
||
return result; | ||
} | ||
|
||
int main() | ||
{ | ||
//변수 선언 | ||
int N, sum=0, count=1, temp, answer=0; | ||
|
||
//입력 | ||
cin>>N; | ||
|
||
//자리수 구하기 | ||
temp=N; | ||
while(temp>10){ | ||
temp/=10; | ||
count++; | ||
} | ||
|
||
answer=result(N, count); | ||
|
||
cout<<answer; | ||
|
||
return 0; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
#include <vector> | ||
#include <iostream> | ||
#include <algorithm> | ||
#include <string> | ||
|
||
using namespace std; | ||
|
||
int bruteforce(int n){ | ||
for(int i=1; i<n; i++){ | ||
//분해합 구하기 | ||
int tmp=i; | ||
int sum=i;//분해합 저장하기 | ||
|
||
while(tmp>0){ | ||
sum+=tmp%10; | ||
tmp/=10; | ||
} | ||
if(sum==n) return i; | ||
} | ||
return 0; | ||
} | ||
|
||
int main() | ||
{ | ||
//입력 | ||
int n; | ||
cin>>n; | ||
|
||
cout<<bruteforce(n); | ||
|
||
return 0; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p3. 모든 경우에 기물이 체스판을 벗어나는 것이 조건 위배죠! 움직임 조건별로 정리하는 것보다 전부 하나의 함수로 만들어서 처리하셨어도 좋을 것 같네요!