5622번 c언어


전화를 걸기 위해 번호를 누르는데 숫자 1을 걸려면 총 2초가 걸리고 1 보다 큰수를 거는데 걸리는 시간은 이보다 더 걸리며, 한칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.

문제풀이

#include <stdio.h>
#include <string.h>


int main(void){
  
  char arr[15]; // 문자로 받는 최대 길이가 15여서 15크기의 배열 선언.
  int time=0,len; 
 	
  scanf("%s", arr);
  len = strlen(arr); // 문자의 길이를 측정하기 위해 strlen을 사용.

  for(int i=0; i<len; i++){    // 문자의 길이 만큼 for문 실행.
    char x = arr[i] - 'A';    // 입력된 문자에서 대문자 A만큼 빼준것을 x에 저장.
    if( x <= 2 ){     // 만약 x 값이 0~2 사이면 ( A~C) 사이면 time 변수에 2를 더함.
      time += 2;
    }
    else if ( x < 2 || x <= 5){    // 같은 의미로 ( D~F) 까지면 time + 3 
      time += 3;
    }
    else if( x < 5 || x <= 8){   // ( G~I ) 까지면 time + 4 
      time += 4;
    }
    else if ( x < 8 || x <= 11){    // ( J~L ) 까지면 time + 5
      time += 5;
    }
    else if ( x < 11 || x <= 14){     // ( M ~ O ) 까지면 time + 6
      time += 6;
    }
    else if ( x < 14 || x <= 18){     // ( P~S ) 까지면 time + 7 
      time += 7;
    }
    else if ( x < 18 || x <= 21){     // ( T~V ) 까지면 time + 8
      time += 8;
    } 
    else if ( x < 21 || x <= 25){    //  ( W ~ Z ) 까지면 time + 9
      time += 9;
    }
    else {
      time += 10;  // ( 그럴일 없지만 이외의 경우 time + 10 ) 
    }
    time += 1;  ( 번호를 입력후 처음 자리로 돌아오기 때문에 자리수 하나당 + 1씩 해줌 ) 
  }
  printf("%d\n", time);  // 모두 더한 값을 출력 

  return 0;
}



느낀점

이번 로직은 꽤나 노가다 성을 요구하는 문제였던것 같다. 로직은 생각보다 간단하게 떠올랐고 다른분들 풀이를 보니 arr[i] - 'A' 로 하지않고 바로 time 에 값을 더해주셨는데 배열 단원인 만큼 일부로 arr[i] - 'A' 를 활용해서 풀어봤다.

좋은 웹페이지 즐겨찾기