기본적인 시간 계산 문제이다.

 

문제에서 요하는건

  입력값 출력값
1번 경우 17 40 0 14 33 20
200
2번 경우 17 40 45 19 21 0
6017
3번 경우 23 48 59 0 30 54
2515

 

다음과 같이 출력되는 것이며 조건은 다음과 같습니다

 

생각을 잠시해보면,, 

- 1시간을 초로 환산하면 1 X 60 X 60 = 3600초

- 1분을 초로 환산하면 60초 이기 때문에 이걸 응용해서 문제를 해결하면 될거같습니다.

 

우선 입력을 받기위해 scanf 로 입력을 받겠습니다

입력을 받아야할것은 총 두개로 시간 , 분 , 초 엔터(개행) 후에 요리시간에 걸리는 초입니다.

변수는 보기쉽게 hour , min , sec , time 으로 하였습니다.

#include <stdio.h>

int main(){
    int hour,min,sec; // 시간 , 분 ,초 변수
    int time; // 걸리는 초 변수
    scanf("%d %d %d",&hour,&min,&sec); // 시간,분,초 입력 받기
    scanf("%d",&time); // //걸리는 초 입력받기
}

이제 입력을 받았으면 초(time 변수) 를 시간, 분, 초로 변환해

각각 시간(hour 변수)  분(min 변수)  초(sec변수) 에 더해주도록 하겠습니다.

 

    hour = hour + time/3600;
    min = min + time%3600/60;
    sec = sec + time%3600%60;

위에서 이야기 한것처럼 1시간은 3600 초 이므로 받아온초(time 변수) 에서 3600으로 나눈 몫이 시간이되겠죠?

잡설인데.. 2023년 정보처리기사 실기 2회차 문제에 동전 거스름돈 문제가 나왔었습니다,, %%% 십

 

다 더해주었다면 이제 각각 다음과정을 거쳐야합니다.

 

1. 초가 60이 넘는다면 0부터 다시 시작하고 분에 넘는시간만큼 더해주기

2. 분이 60이 넘는다면 0부터 다시 시작하고 시간에 넘는시간만큼 더해주기

3. 시간이 24가 넘는다면 0부터 다시 시작하게

 

왜냐하면 26시간 88분 67초라는 시간은 이세상엔 없기 때문입니다,,

실제로 위과정까지 더해주기만 하면 이런값들이 보여지겠죠?

if(sec>=60) { //초가 60을 넘기게되면
        min = min + sec /60 ; // 초에서 나눈 몫을 분에 더해줍니다.
        sec = sec %60 ; // 나머지값을 남기면됩니다.
    } 
    if(min>=60) {
        hour = hour + min/60 ; // 초 계산과 동일합니다.
        min  =  min%60 ;
    }
    if(hour>=24){ 
        hour = hour % 24;
        // 여기서 -24가 아닌 나머지 연산자로 %24를 해야합니다. 반례로 98을 생각해보세요 -24를 하면
        // 결과는 74가 될것입니다,,
    }
    
    // 여기서 중요한게 시간,분,초 순으로 조건문을 걸게되면 문제가 생길수도있습니다
    // 예를 들어 134 + 149 계산을할때 일의 자리부터 계산을 해서 10을 초과하는건
    // 다음자리로 넘겨주잖아요? 이거랑 동일하게 생각하시면 됩니다.

 

아래엔 풀코드입니다.

#include <stdio.h>

int main(){
    int hour,min,sec;
    int time;
    scanf("%d %d %d",&hour,&min,&sec);
    scanf("%d",&time);
    hour = hour + time/3600;
    min = min + time%3600/60;
    sec = sec + time%3600%60;
    if(sec>=60) {
        min = min + sec /60 ;
        sec = sec %60 ;
    }
    if(min>=60) {
        hour = hour + min/60 ;
        min  =  min%60 ;
    }
    if(hour>=24){
        hour = hour % 24;
    }
    printf("%d %d %d",hour,min,sec);
}

 

좀 중구난방이였는데 도움이 되셨을까요,,

엣지 기준입니다.

 

f12 누르기

열기 DevTools

 

 

 

톱니바퀴 누르기(이모티콘 옆)

 

 

 

JavaScript 사용안함 체크

끝입니다..

 


chrome 기준입니다

f12 누르기

이모티콘 옆 톱니바퀴를 눌러줍니다

 

 

Preferences 에서 Disable JavaScript 체크

 

 

1264번: 모음의 개수 (acmicpc.net)

 

1264번: 모음의 개수

입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 영어 대소문자, ',', '.', '!', '?', 공백으로 이루어진 문장이 주어진다. 각 줄은 최대 255글자로 이루어져 있다. 입력의 끝에는 한 줄

www.acmicpc.net

 

문제가 원하는 답은 

How are you today? 일때  7

Quite well, thank you, how about yourself 일때 14

I live at number twenty four 일때  9

종료

이렇게 짜면될거같습니다. 딱히 문장갯수 이야기가없어 제한없이 무한반복으로 받겠습니다..

문자열을 처리할때 띄어쓰기 포함은 %[^\n]s 로 입력받고

바로 밑단에 getchar() 를 이용해 개행키를 받아주기로 합시다,,,,, 하지 않으면 오류남

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

int main(){
	char a[255];
	int cnt =0;

	while(1){
    	scanf("%[^\n]s",a);
    	// getchar();
    	printf("%s",a);
}



}

이렇게 오류납니다,,

 

#include <stdio.h> 
#include <string.h> //---(1)

int main(){
char a[256]; //---(2)
int cnt =0; //---(3)

while(1){ // ---(4)
    scanf("%[^\n]s",a); //---(5)
    getchar(); //---(6)
    for(int i=0;i<strlen(a);i++){ //---(7)
        if(a[i]=='a'||a[i]=='i'||a[i]=='u'||a[i]=='e'||a[i]=='o'||a[i]=='A'||a[i]=='I'||a[i]=='U'||a[i]=='E'||a[i]=='O') 
        cnt++;
    }
    if(a[0]=='#'&&strlen(a)==1) break; //---(8)
   
    printf("%d\n",cnt);
    cnt =0; //---(9)
}



}

풀코드입니다 위에서 부터보면

(1) #include <string.h> (7),(8) 번에서 쓰이는 문자열 함수 strlen( )을 불러오기 위한 라이브러리입니다. 문자열 길이를 알수있습니다.

(2) 문제 조건에 보면

라고 하는데 c언어에서 문자열에 마지막은 \0 널값입니다, 그래서 문자열의 크기를 256으로 할당했습니다.

(3) 정수형 변수 cnt 는 0으로 초기화 해주었습니다

(4) 반복문은 문제의 조건에 문장이 몇개인지 명시되어있지않아 # 이 나오기 전까지 계속 무한 반복하기위해 while(1)

(5) 위에서 설명했던거 처럼 띄어쓰기도 문자로 받기위해 scanf("%[^\n]s",a) 라고 써주었습니다

(6) 엔터키(개행키)를 따로 받아주기위해 getchar( ) 함수를 이용했습니다 왠지(5)번에 [^\n]와 같이쓰니 오류가 나는거같았습니다.,,.,.

(7) 받아온 문자열 a를 반복문을통해 문자열길이만큼 반복해서 모음의 갯수를 파악합니다. 추가로(3)의 변수 cnt에 조건에 만족한다면 1씩 증가시킵니다.

(8) 문제의 조건이었던 #이 나오면 종료되게 하기위해 break문으로 while(1) 밖으로 나갈수있게해줍니다. 여기서 #hi와 같은 문장도 혹시나 테스트할때 들어갈까봐 깔끔하게 # 한글자만 나왔을때 종료되게 하게끔 조건을

if(a[0]=='#' && strlen(a)==1 ) break;  이렇게 걸었습니다.

(9) 하나의 문장테스트가 끝나면 cnt의 누적된 값이 다음 문장에 영향을 끼치지 않게하기위해 다시 0으로 초기화해주었습니다.

 

더 깔끔하게 쓰고싶습니다,, 화이팅,,

 

두개만 있으면 vs코드에서도 c언어를 컴파일 할수있습니다.

 

1. vs 코드 설치

 

Visual Studio Code - Code Editing. Redefined

 

Visual Studio Code - Code Editing. Redefined

Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications.  Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.

code.visualstudio.com

 


 

2.MinGW64 설치

 

https://sourceforge.net/projects/mingw-w64/files/mingw-w64/

 

MinGW-w64 - for 32 and 64 bit Windows - Browse /mingw-w64 at SourceForge.net

A platform built for a new way of working The Work OS that lets you shape workflows, your way

sourceforge.net

밑으로 내려서 x86_54-posix-seh 로 설치했습니다 

 

다운로드 후에 c드라이브에 압축풀기 해주시면 됩니다.

 

 


 

3. 환경변수 편집

win + r 키를 눌러 이동합니다. sysdm.cpl 입력

 

시스템 속성 - 고급 - 환경변수 

 

시스템 변수에서 path - 편집을 선택해줍시다.

새로만들기 후에 C:\mingw64\bin 방금 설치한 경로를 입력해주면 됩니다. 

 

만약 잘 모르시겠다면.

 

 

아까 압축푼 폴더로 이동하셔서 bin 이라는 폴더로 이동합니다

 

 

그다음 검색창을 왼쪽마우스로 클릭하면 경로가 나오는데 이걸 복사 붙여넣기 하시면됩니다.

이제 다 끄면 됩니다. ㅎㅎ


4. 확인 하기전에

4. 재부팅 꼭해주세요


 

5. 확인

 

명령 프롬프트를 열어줍니다.

 

gcc -v 를 입력해줍니다

다음과 같이 나오면 성공입니다.


 

6. vs코드 익스텐션 설치및 설정

 

vs코드를 실행한후 ctrl +x를하고 검색창에서 c/c++ 다음 익스텐션을 설치해주세요

추가로 아래 c/c++ extensions도 설치해주셔야 합니다

 

이제 폴더를 하나 만들고 열어준다음 다음과같이 생성했습니다

hello.c

#include <stdio.h>

int main(){

    printf("hello");

}

 

코드 작성후 오른쪽 상단에

실행 버튼 혹은 F6 키를 눌러줍니다

 

잘 나오는 모습입니다. .. 이제 이걸로 C언어 공부도 열심히 해야겠네요,,,

아 참고로 꼭 ctrl + s 저장후에 실행하셔야 오류가 안나고 실행됩니다. 기억해주세요

자바 스크립트에는 3가지 변수 타입이 있습니다.

다른 언어에 비하면,, 참 편한거같습니다...


 

1. var

var은 다시 선언하고 , 다시 할당하는것이 가능합니다.

선언이란. 예를들어

var a = "사과" // 여기서 처음으로 이름이 a인 var 변수가 선언되었습니다.
console.log(a) // 사과

var a = "나무" // 그런데 여기서 다시한번 var a = "나무" 라고 선언하였습니다.
console.log(a) // 나무

a="바나나" // 여기서는 a="바나나" 라고 재할당 한것입니다.
console.log(a) // 바나나

 

var는 재할당,재선언이 가능하다라고 알고계시면 되겠습니다.

 


 

2. let

let 은 재선언 과정에서 오류가 납니다,,

문법오류가 나면서 let 변수 a는 이미 선언되었다고 나옵니다.

재선언 하는 코드를 지우니 문제 없이 실행되었습니다.

따라서 let은 재선언은 되지않고 재할당만 가능하다. 라고 생각하시면 되겠습니다.

 


 

3.const

const 변수도 재선언은 안되는 모습입니다...

똑같이 문법오류로 이미 선언되었다고 나옵니다.

그럼 a에 재할당 시키는건 어떨까요?

 

vs코드 상에서는 빨간줄 오류 없이 문제가 없지만 실행하면

상수 변수로 할당되었다고 나옵니다.

따라서 const 변수는 재할당 재선언 둘다 안된다고 생각하시면 됩니다.

 


정리하면 var,let,cont 변수들은

  재선언 재할당
var O O
let O X
const X X

라고 보시면 되겠습니다.


 

좀 더 알아보자면 호이스팅 이라는 개념이나옵니다.

호이스팅이란?

자바스크립트 함수는 실행되기 전에 함수내부에 필요한 변수값들을 모두 모아

유효범위의 최상단에 선언한 것 처럼 동작하는 것을 호이스팅 이라합니다.

자바스크립트를 위에서 아래로 하나씩 읽는(파싱)  파서(parser)가 함수 실행전 해당하는 함수 내부를 흝어봅니다

함수 내 존재하는 변수, 함수 선언에 대한 정보를 기억하고 실행합니다.

함수의 유효범위는 함수 블록 {} 내 인데, 필요한 값들을 블록 위의 상단으로 끌어올리는것입니다.

실제코드가 위로 올라가는 것은 아니고

자바스크립트 파서 내부적으로 끌어올려 처리하는 것이므로

실제 메모리에서는 변화가 없습니다.

 


 

var 변수의 호이스팅

console.log( ) 함수가 실행될때 위에 선언된적 없는 a라는 변수가 담겨있습니다.

 첫번째 결과는 undefined인데 내부에서 미리 a변수를 선언하여 undefined로 초기화를 해두었기 때문입니다.

 


 

let 변수의 호이스팅

let 변수는 호이스팅이 불가능합니다. 함수선언전 초기화하기전에 접근할수없다고 나옵니다

 


 

const 변수의 호이스팅

const 변수도 동일하게 호이스팅이 불가능합니다. 함수선언전 초기화하기전에 접근할수없다고 나옵니다.

 


 

간단하게 여기까지 알아본결과 그럼 어떤 변수를 사용하는게 제일 적당할까요,,?

const 변수를 사용하는것이 바람직합니다.

이유는 재할당 재선언이 안된다는것은 코드 중간에 다시 선언될 일이없다는 것이죠.

다른 사람들과 협업,프로젝트를 진행할때 

var나 let으로 선언해 중간에서 그 값을 재할당,재선언하게 되버리면

코드가 짧을경우엔 상관없지만 500줄 더 나아가 엄청 긴 코드가 되어버리면

찾기 난감한 상황이 올것입니다,,

여기까지입니다,, 설명이 부실하거나 이상한부분 있다면 댓글부탁드립니다,,!

 

'웹 홈페이징 > JS' 카테고리의 다른 글

자바스크립트 html 파일과 연결하기 , alert( )  (0) 2023.08.01

자바스크립트는 웹 페이지를 좀더 동적으로 표현할수있게 해줍니다.

경고창을 띄운다던지 애니메이션을 보여준다던지.

그전에 html 파일과 js파일은 연결하고 확인해보는 과정을 해보려고합니다.

 

HTML 파일 sample.html

1. vs코드를 열고 폴더에 다음과같이 html 파일과 js파일을 만들었습니다.

 

2. html 파일에 

 <script src="./sample.js"></script>

src에는 경로입니다....

그럼 잘 연결되었는지 확인하기위해서 경고창을 띄워보겠습니다.

 

JavaScript 파일 sample.js

경고문을 띄우는 명령어는 alert입니다.

alert( ) <- 괄호안에 '' 문자열 타입으로 넣어주면 됩니다. 

자바 스크립트 문자열은 '' "" 모두 인식합니다.

저장후 홈페이지 새로고침을 하면 아래처럼 경고창이 나오게됩니다.

 

'웹 홈페이징 > JS' 카테고리의 다른 글

자바스크립트 변수 var , let , const 차이 및 설명  (0) 2023.08.01

<ol>

order list 순서가 있는 리스트입니다.

밑에 <li>로 내부 리스트를 열거하면됩니다.

See the Pen Untitled by bongEdalE (@bongEdalE) on CodePen.

 

<ul>

unorder list 순서가 없는 리스트입니다. 위에 <ol> 과는 다르게

순서없이 ●로 열거되어있습니다

똑같이 <li> 태그로 리스트를 만들어야합니다

See the Pen Untitled by bongEdalE (@bongEdalE) on CodePen.


<img>

이미지 삽입 src 를 이용해 파일 경로를 입력해주면 됩니다.

개죽이 사진을 준비했습니다.

  <p>개죽이에요</p>
  <img src="./개죽이.png">


<a>

하이퍼링크를 거는 태그입니다. href로 주소를 명시해주면 이동할수있습니다.

 

<p>구글로 드가자</p>
<a href="www.google.com">여기를 누르시오</a>

 

내가 알바를 많이 했어서 그런지 알바 월급,주급 관련하여

작은 프로젝트를 하나 만들려고 고민을 했다.

처음엔 퇴직금 계산기,,? 쪽으로 만들려고 하다

퇴직금은 주기적으로 하는게 아니라 뭔가 한방에 빡! 하는 느낌이어서

주휴수당은 매 주마다 확인해보니까,, 어떨까 하다가 만들게 되었다,,

(내가 일했던 대기업 알바들은 주로 주간 스케쥴이었음,, 시간이 달라 매번 계산해보아야했다..)


1. 주휴수당 공부하기

사이트를 찾아보다 이곳이 제일 괜찮은거 같아 검색해보게 되었다.

주휴수당 지급 조건 알아보기 (feat.주휴수당 계산기) | 시프티 (shiftee.io)

 

주휴수당 지급 조건 알아보기 (feat.주휴수당 계산기) | 시프티

주휴수당의 개념과 함께 주휴수당 지급 기준과 계산 방법에 대해 알아보겠습니다.

shiftee.io

 

뭐 대충 보아하니 조건이

1. 일주일에 15시간 이상 근무를 해야한다.

2. 규칙적으로 근무하는 아르바이트의 경우 1일 소정근로 시간 X 최저시급

3. 불규칙할 경우 한주 평균 근로시간 X 4 / 20일(주에 5일근무로 치는듯) X 최저시급

 

 여기서 평균 근로 시간은 총 한달 근무 일수 / 4로 계산한다.

이게 큰 틀인거 같다..

최대한 사용자 입장에서 편하게 만드려면 입력하는 칸을 최소화 해야겠다,,는 생각이 들었다.

일단 첫화면에

15시간 미만이면 받을수없다는 부분을 알려주고

1. 하루 근무일수가 일정한지

2. 하루 근무일수가 일정하지 않은지

로 분기를 두고 화면을 두개로 쪼개 입력후 계산할수있게 만들수 있게 화면을 구성해야겠다.

총 화면은 3개로 구성하겠다.


 

2. 안드로이드 스튜디오 액티비티 및 레이아웃 구성하기

 

이름은 WAcalculator 로 했다.. 찾아보니

라더라

 

깔끔하게 3개로만 만들겠다,, 복잡한건 머리가 따라오지 않는다

 

테스트,,

 

잘 돌아가는 모습이다,, 이제 레이아웃 먼저 배치해보겠다.

아 좀 팁이라면 팁인데,,

 

일일이 치기 귀찮은 코드들 onenote에 정리해 두면 진짜 편하다,, 그냥 복붙만 하면댐

메인페이지

대충 배치만 했습니다,,

1번 하루 일하는게 정해져있을때
이건 불규칙할때,,입니다

 

일단 여기까지 개발하고 기능은 다음에 추가하는걸로 하겠습니다.!

+ Recent posts