[TIL]20210716

박창현·2021년 7월 16일
0

TODAY I LEARNED

목록 보기
17/53

C언어

자료구조 - 스택

LIFO(Last in, First out)

자료구조 - 큐

FIFO(First in, First out)

  • 위의 두 자료구조는 배열과 연결 리스트를 통해 구현이 가능하다.

자료구조 - 딕셔너리

딕셔너리는 ‘키’와 ‘값’로 이루어진다.
‘키’에 해당하는 ‘값’을 저장하고 읽어온다.
일반적인 의미에서 ‘해시 테이블’과 동일한 개념이라고도 볼 수 있다.

알고리즘

백준 2941

#include <stdio.h>
#include <string.h>
int main()
{
  int len=0,cnt=0;;
  char crocha[101];
  scanf("%s",crocha);
  len=strlen(crocha);
  for (int i=0;i<len;i++){

    if (crocha[i]=='c'&&crocha[i+1]=='='){
      cnt++;
      i+=1;
    }
    else if (crocha[i]=='c' && crocha[i+1]=='-'){
      cnt++;
      i+=1;
  }
    else if (crocha[i]=='d' && crocha[i+1]=='z'&&crocha[i+2]=='='){
      cnt++;
      i+=2;
  }
    else if (crocha[i]=='d' && crocha[i+1]=='-'){
      cnt++;
      i+=1;
  }  
    else if (crocha[i]=='l' && crocha[i+1]=='j'){
      cnt++;
      i+=1;
}
    else if (crocha[i]=='n' && crocha[i+1]=='j'){
      cnt++;
      i+=1;
      
    }
    else if (crocha[i]=='s' && crocha[i+1]=='='){
      cnt++;
      i+=1;    
  }
     else if (crocha[i]=='z' && crocha[i+1]=='='){
      cnt++;
      i+=1;
    }  
    else{
      cnt++;
    }


  }
  printf("%d",cnt);

}

백준 1316

#include <stdio.h>
#include <string.h>
int main()
{
  int count=0,len,total=0;
  char word[101];
  scanf("%d",&count);  
  for (int i=0;i<count;i++){
    int check[101]={0};
    int conse=0;
    scanf("%s",word);
    len=strlen(word);
    for (int j=0;j<len;j++){
      if (check[word[j]-'a']==0){
        check[word[j]-'a']=1;
      }
       else if (word[j]!=word[j-1]){
          conse=1;
          }

    }
    if(conse==0){
      total++;
    }
  }
  printf("%d",total);
}

백준 1712

실패작:

#include <stdio.h>
#include <string.h>
int main()
{
  long long a=0,b=0,c=0,sell=0,s=0;
  scanf("%lld %lld %lld",&a,&b,&c);
  for (sell=0;sell<2100000001;sell++){
    if (a+b*sell<c*sell){
      printf("%lld\n",sell);
      s=1;
      break;
    }
   
  }
  if(s==0){
 printf("-1");
  }
 
}

for 문을 통한 루프는 시간초과가 된다.

정답.

#include <stdio.h>
#include <string.h>
int main()
{
  int diff;
  int a=0,b=0,c=0,sell=0,s=0;
  scanf("%d %d %d",&a,&b,&c);
  diff=c-b;
  if (diff<=0){
    printf("-1");
  }
  else{
    printf("%d\n",a/diff+1);
 
}
//a + b * 판매량 < c * 판매량
//-->  a/(c-b)<판매량
// +1 하는 이유는 a/diff까지 하면 이익이 +-0가 되는 것임으로 최초로 이익이 발생하는 판매량은 '한' 개를 더해야한다.

}

많은 사람들 처럼 나또한 계산식으로 만들어 해결하는 법을 떠올리지 못했다.
인터넷을 참고해 풀었고 교훈을 얻었다.

루프문이 만능은 아니다.
빠르게 작동하는 다른 방법이 있는지 꼭 확인하자.

profile
개강했기에 가끔씩 업로드.

0개의 댓글