본문 바로가기

백준

5586 JOI와 IOI 비슷한 문제를 전에 푼 적이 있었다! 그래서 편하게 풀었다. 지금 어떤 상태인지를 판단한 다음 다음 단어를 확인하면서 상태를 바꿔나간다. 뭔가 파이썬에는 찾는게 더 편하게 돼있을 것 같은데 나는 씨쁠을 쓰고 씨쁠에는 관련 함수가 있는지 잘 모르겠다. 그래서 그냥 바로 생각나는 방법으로 풀었다. #include using namespace std; int main() { int jstate = 1, istate = 1; int jcount = 0, icount = 0; string str; cin >> str; for(int i = 0; i < str.length(); i++){ //JOI if(str[i] == 'J' && jstate == 1){ jstate = 2; } else if(jstate ==.. 더보기
11718 그대로 출력하기 이거 5달 전에 풀고 틀렸었는데 드디어 다시 맞았다. 처음 풀 때는 feof 처럼 끝에 뭐가 있고 그걸 확인하는 식으로 생각했었다. 이번에는 단어 개수 세는 문제 생각해서 이렇게 풀었다. false 나면 그냥 나오게끔~~ #include using namespace std; int main() { string str; while(getline(cin, str)){ cout 더보기
1373 2진수 8진수 음.. 코드가 더럽다.. 어떻게 할지 몰라서 그냥 사람이 하는 그대로 코딩했다. 8진수로 보통 3자리씩 끊어 읽기 때문에 3의 배수로 길이를 맞춰준다. 다음으로 각 자리수를 계산한다. 마지막으로 계산한 8진수를 문자열에 붙여준다. 끝~! #include using namespace std; int main() { string str; cin >> str; if ((3 - (str.length() % 3)) == 1) str = "0" + str; else if ((3 - (str.length() % 3)) == 2) str = "00" + str; string result = ""; int sum = 0; for(int i = 0; i < str.length(); i++){ if(i%3 == 0) sum.. 더보기
7567 그릇 전에 주석문제를 푼 적이 있었는데 그때는 상태에 따라 계산했었다. 이 문제도 그렇게 풀까 했는데 어짜피 문자열 통으로 받으니깐 바로 앞의 값이랑 비교하기로 했다. 먼저 첫 그릇의 높이는 10으로 두고 다음 접시와 이전 접시와 비교해서 값을 더해나갔다. #include using namespace std; int main() { int hight = 10; string str; cin >> str; for(int i = 1; i < str.length(); i++){ if(str[i-1] == str[i]) hight += 5; else hight += 10; } printf("%d", hight); } 코드도 간단하다. (+) strlen()함수는 문자열 길이를 그때마다 계산하기 때문에 이것보다는 str.. 더보기
6539 만취한 상범 문제 보고 미쳤다 싶었다. 상범아.. 내용이 그렇지만 문제는 풀만했다. 저 1, 2, 3은 생각의 흐름.. ㅎㅎ 조금 신경쓰이는건 저렇게 sqrt 사용해도 되나?? (실수라서) 그것 말고는 스무-스하게 풀었다. #include #include using namespace std; int main() { int t; double n; scanf("%d", &t); for(int i = 0; i < t; i++){ scanf("%lf", &n); printf("%d\n", (int)sqrt(n)); } } 간단한 코드 +) sqrt를 쓸 때 10^15까지의 숫자는 문제없이 제곱근의 정수 값을 받을 수 있다고 한다(double을 쓸 때) #include #include using namespace std; i.. 더보기
1037 약수 어떻게 풀지 바로 알았다! 근데 구현이 문제였다. 전에 set에 대해 잠시 살펴봤었는데 중복 허용 안 하고 자동으로 정렬된다는 점 때문에 이걸 쓰려고 했다. 하지만 이상하게 s.begin() s.end()이 곱해지지 않았다. 찾아보니 이 자료형은 iterator이라고 뭐가 따로 있었다. set::iterator iter; 변수 만드는 것도 이상하게 생겼다.. #include #include using namespace std; int main() { int n, tmp; set s; //set::iterator iter; scanf("%d", &n); for(int i = 0; i < n; i++){ scanf("%d", &tmp); s.insert(tmp); } int start = s.begin() .. 더보기
1100 하얀칸 늘 그렇듯 문제 정의하고 어떻게 풀지 짰다. 저걸 코드로 옮기면서 문제를 두 개 발견했는데 (하나는 문제는 아니지만) 먼저 어짜피 홀수 줄 아니면 짝수줄이라 굳이 변수를 두 개 만들 필요가 없다. 나머지는 엔터키..! 자꾸 뭔가 이상해서 확인해봤더니 scanf(c)가 enter까지 받아서 계산을 잘못 하고 있었다. #include int main() { char c; bool isOdd = true; int count = 0; for(int i = 1; i > s; for(int j = 0; j < 8; j++){ if(s[j] == 'F' && (i+j) % 2 == 0) count++; } } printf("%d", count); return 0; } 홀수 짝수 달라지는 건 어떻게 처리하지 했는데 그.. 더보기
1009 분산처리 입력을 정의해봤다! 처음에 문제 이해 잘못해서 아.. a가 컴퓨터 개수고 b가 데이터인가? 싶었는데 아니었다. 문제를 어떻게 풀어야 하는지 감이 왔다. 끝자리가 컴퓨터 번호이다. 하지만 그렇다고 10으로 나눈 나머지로 구할 수 없다.. (100의 1000000 승이나 되는데 어케 구해) 결국에는 일의 자리 규칙을 찾아서 그에 맞게 배열을 만들어줬다. #include int arr[10][4]={{0,0,0,0},{1,1,1,1},{6,2,4,8}, {1,3,9,7},{6,4,6,4},{5,5,5,5}, {6,6,6,6},{1,7,9,3},{6,8,4,2},{1,9,1,9}}; int main() { int t, a, b; scanf("%d", &t); for(int i = 0; i < t; i++){ s.. 더보기