#include<stdio.h>
#include<string.h>
int main()
{
char arr[1000001];
scanf("%[^\n]", arr);
int len, i = 0;
len = strlen(arr);
int cnt = 0;
for (i = 0; i < len; i++) {
if (arr[i] == ' ') cnt++;
}
cnt++;
if (arr[0] == ' ') cnt--;
if (arr[len-1] == ' ') cnt--;
printf("%d", cnt);
}
코드 설명 : char 배열인 arr을 만들어주고 이를 입력받도록 했다. 이 때, 입력 형식을 %[^\n]이라고 했다. 이는 \n이 나오기 전까지 모든 문자를 입력받도록 해준다. strlen 함수를 이용하여 arr배열의 길이를 변수 len에 저장해주었다. for문으로 len만큼 반복시켜주어 배열의 원소가 빈칸일 때 cnt값을 증가시켜주도록 했다. 빈칸의 개수보다 단어의 개수가 항상 1개 더 많으므로 하나 더 추가해주었다. 만약 맨 앞이나 맨 뒤가 공백으로 시작하거나 끝난다면 cnt값을 감소시켜주도록 하였다. 그리고 이 cnt값을 마지막에 출력시켜주었다.
No. 1330
#include<stdio.h>
int main()
{
int a, b;
scanf("%d %d", &a, &b);
if (a == b) printf("==");
else {
if (a > b) printf(">");
else printf("<");
}
}
코드 설명 : a, b를 입력받아주고 두 수 값이 동일하면 '='을 출력시켜주고 동일하지 않으면 a>b일 경우는 '>', 아닐 경우는 '<'를 출력시켜주도록 하였다.
No. 1157
#include<stdio.h>
#include<string.h>
int main()
{
char arr[1000001];
int i, cnt[26] = { 0, }, j, len, max, index;
scanf("%s", arr);
len = strlen(arr);
for (i = 'a'; i <= 'z'; i++) {
for (j = 0; j < len; j++) {
if (i == arr[j]) {
cnt[i - 'a']++;
}
}
}
for (i = 'A'; i <= 'Z'; i++) {
for (j = 0; j < len; j++) {
if (i == arr[j]) {
cnt[i - 'A']++;
}
}
}
max = cnt[0];
for (i = 0; i < 26; i++) {
if (max <= cnt[i]) {
max = cnt[i];
index = i;
}
}
int same = 0;
for (i = 0; i < 26; i++) {
if (max == cnt[i]) {
same++;
}
}
if (same > 1) printf("?");
else printf("%c", index + 'A');
return 0;
}
코드 설명 : 먼저 arr배열을 입력받았다. 이 배열의 길이를 len 변수에 저장해주었다. 이중 for문을 이용해서 arr배열의 원소가 a~z에 각각 해당되면 cnt배열에 i-'a'번째 인덱스에 1씩 증가시켜주었다. 이와 똑같이 A~Z에 각각 해당되면 i-'A'번째 인덱스에 1씩 증가시켜주었다. max 초기값을 cnt[0]으로 일단 지정하였고 for문으로 cnt배열의 원소들을 확인해주면서 가장 최댓값을 구하고 그 인덱스를 index 변수에 저장해주었다. 가장 많이 사용한 알파벳이 여러개일 경우를 구별하기 위해서 for문으로 max와 cnt[i]값이 동일할 때 same값을 증가시켜주도록 하였다. same값이 2이상일 경우 '?'를 출력해주고 아닐 경우에는 대문자를 출력시켜주어야 하기 때문에 index에 'A'값을 더한 값을 출력해주었다.
ssh 명령어는 SSH 서버 접속 인증을 위한 암호화를 제공하여 네트워크 해킹의 위험에서 안전하게 접속할 수 있다.
>사용법 : ssh[옵션] [주소]
<옵션>
-1 :ssh를 프로토콜 버전 1로 시도 -2 :ssh를 프로토콜 버전 2로 시도 -4 :IPv4 주소만 사용 -6 :IPv6 주소만 사용
-Fconfigfile: 사용자 설정 파일(configfile)을 지정한다. -Ismartcard_device: 사용자 개인RSA키를 저장한 디바이스(smartcard_device)를 지정한다. -iidentity_file:RSA나DSA인증 파일(indentity_file)을 지정한다. -llogin_name: 서버에 로그인할 사용자(login_name)를 지정한다. -pport: 서버에 접속할 포트를 지정한다. -q: 메시지를 출력하지 않는다.
-V: 버전 정보를 출력한다. -v: 상세한 정보를 출력한다. 디버깅에 유용하다. -X: X11forwarding기능을 활성화한다. 이는 서버에 접속하여 서버의 프로그램을 클라이언트의 화면에서 실행할 수 있다. -x: X11forwarding기능을 비활성화한다. -Y: 신뢰할만한 X11forwarding기능을 활성화한다.
[네이버 지식백과]ssh(유닉스 리눅스 명령어 사전, 2010. 11. 30., 우종경, 박종오)
-p 옵션을 사용해 2220 포트를 지정해주었다. ssh 명령어 사용법에 맞게 옵션을 적은 후 주소를 적어주었다. 그러고 나니 비밀번호를 요구하였고 위 문제에 써있는대로 적어주었더니 위와 같은 창이 뜨게 되었다.
Bandit Level 0 -> 1
file 'readme' 내에 비밀번호가 있다.
ls 명령어의 a옵션을 통해 어떤 파일이 존재하는 지 알아보았고 그 파일을 읽어보기 위해 cat명령어를 사용해주었다.
Bandit Level 1 -> 2
file '-' 내에 비밀번호가 있다.
먼저 bandit1로 접속해주기 위해 ssh 명령어를 사용해주었다.
ls로 파일을 확인해 주었고 위 단계처럼 cat명령어를 통해 -파일을 열어보려고 시도하였지만 실패하였다. 이는 파일이름이 특수문자여서 그런 것으로 보여진다. 그래서 특수문자인 파일이름 '-'을 읽어주기 위해 ./을 붙여주었다.
Bandit Level 2 -> 3
file 'spaces in this filename' 내에 비밀번호가 있다.
ls을 통해 파일을 확인해주었다. 파일 이름에 공백이 포함되어 있으므로 이를 표현하기 위해 역슬래시 기호를 사용해주었다.
Bandit Level 3 -> 4
hidden file 'inhere' 내에 비밀번호가 있다.
ls을 통해 파일을 확인해주고 cd로 inhere파일로 들어가주었다. inhere파일에서 ls -a로 안에 .hidden파일이 있음을 확인하였다. cat 명령어로 .hidden 파일을 읽어주었더니 비밀번호가 나왔다.
Bandit Level 4 -> 5
cd inhere로 inhere파일로 들어가주었고 여기서 ls명령어를 통해 총 10개의 파일이 있음을 확인하였다. cat명령어로 모든 파일의 내용을 출력해보았더니 위와 같은 결과가 나왔고 비밀번호를 정확히 파악하기 어려워서 특정 파일을 열어보기로 했다.
file명령어를 통해 각 file의 속성을 출력해주었다. -file07만 ascii text로 이루어졌음을 확인하고 cat 명령어를 통해 해당 파일을 열어주었더니 비밀번호가 나왔다.
- 웹브라우저에서 html파일을 요청 -> 웹서버가 확장자를 확인, 자신이 처리할 수 있는 html임을 판단 -> htdocs 디렉토리에서 읽고 웹브라우저에 전송
> .php
- 웹브라우저에서 php파일을 요청 -> 웹서버가 확장자를 확인, 자신이 처리할 수 없기 때문에 PHP에게 파일에 대한 처리를 위임 -> PHP가 htdocs 디렉토리에서 읽고 PHP 문법에 따라 해석하고 html파일을 생산 -> 그 html을 웹서버가 웹브라우저에게 전송
<? php //php 코드 시작
echo date('Y-m-d H:i:s')
?> //php 코드 끝
<?php
$str="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
echo $str;
echo strlen($str);
echo nl2br($str);
?>
- strlen 함수 : 문자열 길이 확인 함수 - nl2br 함수 : 자동으로 줄바꿈을 해주는 함수
이 코드를 이용하면(<ol>태그 부분) data디렉토리 아래에 새로운 파일을 추가해도(데이터가 달라져도) 자동으로 웹에 추가된다.
함수
<?php
function basic(){
print("abc1<br>");
print("abc2<br>");
}
basic(); // 함수 내 코드 실행
function sum($left, $right){
print($left+$right);
print("<br>");
}
sum(2,4); // 출력 : 6
sum(4,6); // 출력 : 10
?>
URL을 통해 데이터를 전송하는 방식은 사용자가 서버로 데이터를 보낼 때 쓰면 안된다. 데이터를 서버쪽으로 전송할 때, 주소의 title 혹은 파라미터 정보가 포함되어 있으면 사용자들이 자신이 원하지 않았는데 글이 써지는 등의 일이 발생할 수 있기 때문이다. -> 해결 방법 : form 태그에 method를 post로 지정