오늘은
오늘은 수요일입니다 일주일의 중간이죠
힘을 내야겠습니다~
학원 수업
<<SQL>>
<정규형>
제1 정규형 = 속성은 반드시 하나의 값만 가져야 한다
속성값이 원자값이어야 한다
제2 정규형 = 엔티티의 모든 일반 속성은 반드시 모든 주식별자에 종속되어야 한다
=> 주식별자가 복합식별자인 경우
-> 일반 속성이 주식별자의 일부에만 종속될 수 있어 이상 현상 발생
-- 연예인 테이블
CREATE TABLE entertainers(
name VARCHAR2(30),
birthday VARCHAR2(20),
job VARCHAR2(30)
);
INSERT INTO entertainers
VALUES ('양동근', '19790601', '배우, 가수');
INSERT INTO entertainers
VALUES ('박은빈', '19920904', '배우');
INSERT INTO entertainers
VALUES ('장기하', '19820220', '가수, 작가');
-- 직업이 가수인 연예인은
-- 속성값이 원자값이어야 한다
-- 직업이 가수인 연예인은? 검색의 어려움이 있음
SELECT *
FROM entertainers
WHERE job LIKE '%가수%'; -- = 사용하면 불가. LIKE 사용하면 되긴 됨
-- 연예인 테이블, 직업 테이블로 분해
-- 연예인 테이블, 직업 테이블로 분해
CREATE TABLE entertainer(
name VARCHAR2(20),
birthday VARCHAR2(20)
);
INSERT INTO entertainer
VALUES ('양동근', '19790601');
INSERT INTO entertainer
VALUES ('박은빈', '19920904');
INSERT INTO entertainer
VALUES ('장기하', '19820220');
SELECT * FROM entertainer;
CREATE TABLE job(
ename VARCHAR2(20),
jobname VARCHAR2(30)
);
INSERT INTO job
VALUES ('양동근','배우');
INSERT INTO job
VALUES ('양동근','가수');
INSERT INTO job
VALUES ('박은빈','배우');
INSERT INTO job
VALUES ('장기하','가수');
INSERT INTO job
VALUES ('장기하','작가');
SELECT * FROM job;
-- 연예인의 이름고 생년월일, 직업 정보를 검색
-- 동등조인
SELECT a.*, b.jobname
FROM entertainer a, job b
WHERE a.name = b.ename;
DROP TABLE job;
-- 내부조인
SELECT a.*, b.jobname
FROM entertainer a INNER JOIN job b
ON a.name = b.ename;
COMMIT;
CREATE TABLE drink(
drink_code VARCHAR2(3) PRIMARY KEY, -- 음료 코드
drink_name VARCHAR2(30) NOT NULL -- 음료 이름
);
INSERT INTO drink VALUES ('A01', '아메리카노');
INSERT INTO drink VALUES ('B01', '카페라떼');
INSERT INTO drink VALUES ('C01', '자몽');
CREATE TABLE cafe_order(
order_no VARCHAR2(10) PRIMARY KEY, -- 주문 번호
drink_code VARCHAR2(3), -- 음료 코드
order_cnt NUMBER NOT NULL, -- 주문 수량
FOREIGN KEY(drink_code) REFERENCES drink(drink_code) -- 외래키
);
DROP TABLE cafe_order;
DROP TABLE drink;
INSERT INTO cafe_order VALUES ('2023100101', 'A01', 3);
INSERT INTO cafe_order VALUES ('2023100102', 'B01', 1);
INSERT INTO cafe_order VALUES ('2023100123', 'A01', 2);
SELECT * FROM drink;
SELECT * FROM cafe_order;
-- 동등 조인
SELECT b.order_no 주문번호,
b.drink_code 음료코드,
a.drink_name 음료명,
b.order_cnt 주문수량
FROM drink a, cafe_order b
WHERE a.drink_code = b.drink_code;
-- 내부 조인
SELECT b.order_no 주문번호,
b.drink_code 음료코드,
a.drink_name 음료명,
b.order_cnt 주문수량
FROM drink a INNER JOIN cafe_order b
ON a.drink_code = b.drink_code;
-- 내부조인 USING 사용
SELECT b.order_no 주문번호,
drink_code 음료코드,
a.drink_name 음료명,
b.order_cnt 주문수량
FROM drink a INNER JOIN cafe_order b
USING(drink_code);
-- 주문이 없는 음료를 포함해서 모든 정보 출력
SELECT NVL(b.order_no, ' ') 주문번호,
a.drink_code 음료코드,
a.drink_name 음료명,
NVL(b.order_cnt, '0') 주문수량
FROM drink a, cafe_order b
WHERE a.drink_code = b.drink_code(+);
-- 외부 조인
SELECT NVL(b.order_no, ' ') 주문번호,
a.drink_code 음료코드,
a.drink_name 음료명,
NVL(b.order_cnt, '0') 주문수량
FROM drink a LEFT OUTER JOIN cafe_order b
ON a.drink_code = b.drink_code;
-- 외부 조인 USING 사용
SELECT NVL(b.order_no, ' ') 주문번호,
drink_code 음료코드,
a.drink_name 음료명,
NVL(b.order_cnt, '0') 주문수량
FROM drink a LEFT OUTER JOIN cafe_order b
USING(drink_code);
COMMIT;
<<JAVA>>
<게시판 만들기>
* DB - SQL
-- 자바 게시판 구현할 board 테이블 생성
CREATE TABLE board(
bno NUMBER PRIMARY KEY,
btitle VARCHAR2(100) NOT NULL,
bcontent CLOB NOT NULL, -- CLOB(Character Large Of Byte)
bwriter VARCHAR2(50) NOT NULL,
bdate DATE DEFAULT SYSDATE -- 게시글 추가시 자동으로 추가됨
);
-- 시퀀스 생성(bno 자동 순번 입력)
-- NOCACHE = 저장하지 않음, 초기화되면 1부터 시작함
CREATE SEQUENCE seq NOCACHE; -- 테이블X, 객체O
DROP SEQUENCE seq;
-- 게시글 추가
INSERT INTO board (bno, btitle, bcontent, bwriter)
VALUES (seq.NEXTVAL, '가입 인사', '안녕하세요~ 만나서 반갑습니다', 'today10');
INSERT INTO board (bno, btitle, bcontent, bwriter)
VALUES (seq.NEXTVAL, '공지 사항', '천장 에어컨 청소합니다', 'admin0000');
TRUNCATE TABLE board;
ROLLBACK;
COMMIT;
-- 전체 검색
SELECT * FROM board
ORDER BY bno DESC;
* JAVA
package board;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
public class BoardExample2 {
private Scanner scanner = new Scanner(System.in);
private Connection conn;
private PreparedStatement pstmt;
// db연결 관련 변수
private String driverClass = "oracle.jdbc.OracleDriver";
private String url = "jdbc:oracle:thin:@localhost:1521/xe";
private String user = "c##mydb";
private String password = "pwmydb";
// 생성자
public BoardExample2() {
try {
Class.forName(driverClass);
conn = DriverManager.getConnection(url, user, password);
// System.out.println("DB연결 성공!" + conn);
} catch (Exception e) {
e.printStackTrace();
exit();
}
}
public void list() {
System.out.println();
System.out.println("[게시글 목록]");
System.out.println("-----------------------------------------------");
System.out.printf("%-4s%-12s%-20s%-20s \n", "no", "writer", "date", "title");
System.out.println("-----------------------------------------------");
// db - borad 테이블의 게시글 가져오기
try {
String sql = "SELECT bno, btitle, bcontent, bwriter, bdate FROM board ORDER BY bno DESC";
pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while(rs.next()) { // 게시글이 있는 동안 반복(다음 행으로 이동)
Board board = new Board();
board.setBno(rs.getInt("bno"));
board.setBwriter(rs.getString("bwriter"));
board.setBdate(rs.getDate("bdate"));
board.setBtitle(rs.getString("btitle"));
// 게시글 출력
System.out.printf("%-4s%-12s%-20s%-20s \n",
board.getBno(),
board.getBwriter(),
board.getBdate(),
board.getBtitle(),
board.getBcontent()
);
} // while 끝
rs.close();
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
exit();
}
mainMenu();
}
public void mainMenu() {
System.out.println();
System.out.println("----------------------------------------------");
System.out.println("1.Create | 2.Read | 3.Clear | 4.Exit");
System.out.print("선택 : ");
String menuNo = scanner.nextLine();
System.out.println();
switch (menuNo) {
case "1":
create();
break;
case "2":
read();
break;
case "3":
clear();
break;
case "4":
exit();
break;
}
}
public void create() {
// System.out.println("create() 매서드 실행됨");
// board 객체 생성
Board board = new Board();
System.out.println("[새 게시물 입력]");
System.out.print("제목: ");
String title = scanner.nextLine();
board.setBtitle(title);
System.out.print("내용: ");
String content = scanner.nextLine();
board.setBcontent(content);
System.out.print("작성자: ");
String writer = scanner.nextLine();
board.setBwriter(writer);
// db작업 - insert
try {
String sql = "INSERT INTO board (bno, btitle, bcontent, bwriter) "
+ "VALUES (seq.NEXTVAL, ?, ?, ?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, board.getBtitle()); // 콘솔에서 입력한 제목을 db에 저장
pstmt.setString(2, board.getBcontent()); // 콘솔에서 입력한 제목을 db에 저장
pstmt.setString(3, board.getBwriter()); // 콘솔에서 입력한 제목을 db에 저장
// sql 실행
pstmt.executeUpdate();
pstmt.close();
System.out.println("*** 글이 작성되었습니다 ***");
} catch (SQLException e) {
e.printStackTrace();
exit(); // 종료 메서드 호출
}
// 목록 메서드 호출
list(); // while문과 같은 기능
}
public void read() {
// System.out.println("read() 매서드 실행됨");
System.out.println("[게시물 읽기]");
System.out.print("글 번호 선택: ");
int bno = Integer.parseInt(scanner.nextLine());
// db처리 - 게시글 한개 보기 = select ~ where 절
try {
String sql = "SELECT * FROM board WHERE bno = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, bno);
// 쿼리 실행
ResultSet rs = pstmt.executeQuery();
if(rs.next()) { // 찾는 자료가 있으면
Board board = new Board();
board.setBno(rs.getInt("bno"));
board.setBwriter(rs.getString("bwriter"));
board.setBdate(rs.getDate("bdate"));
board.setBtitle(rs.getString("btitle"));
board.setBcontent(rs.getString("bcontent"));
System.out.println("****************************************************");
System.out.println("번호: " + board.getBno());
System.out.println("제목: " + board.getBtitle());
System.out.println("내용: " + board.getBcontent());
System.out.println("작성자: " + board.getBwriter());
System.out.println("작성일: " + board.getBdate());
System.out.println("****************************************************");
// 수정, 삭제 메뉴 만들기
System.out.println("1.글수정 | 2.글삭제 | 3.글목록");
System.out.print("선택: ");
String menuNo = scanner.nextLine();
if(menuNo.equals("1")) {
update(board);
}else if(menuNo.equals("2")) {
delete(board);
}
}
rs.close();
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
exit();
}
// 글 목록 메서드 호출
list();
}
public void update(Board board) { // 이미 작성된 글(board)를 가져와서 수정
System.out.println("[수정할 내용 입력]");
System.out.print("제목: ");
String title = scanner.nextLine();
board.setBtitle(title);
System.out.print("내용: ");
String content = scanner.nextLine();
board.setBcontent(content);
System.out.print("작성자: ");
String writer = scanner.nextLine();
board.setBwriter(writer);
// db작업 - update
try {
String sql = "UPDATE board SET btitle=?, bcontent=?, bwriter=? "
+ "WHERE bno=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, board.getBtitle()); // 콘솔에서 수정한 제목을 db에 저장
pstmt.setString(2, board.getBcontent());
pstmt.setString(3, board.getBwriter());
pstmt.setInt(4, board.getBno());
// sql 실행
pstmt.executeUpdate();
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
exit();
}
}
public void delete(Board board) {
// 확인, 취소 메뉴
System.out.println("정말로 삭제하시겠습니까?");
System.out.println("1.OK | 2. Cancel");
System.out.print("선택: ");
String menuNo = scanner.nextLine();
if(menuNo.equals("1")) {
// db작업 - DELETE
try {
String sql = "DELETE FROM board WHERE bno = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, board.getBno());
// sql 실행
pstmt.executeUpdate();
pstmt.close();
System.out.println("*** 글이 삭제되었습니다 ***");
} catch (SQLException e) {
e.printStackTrace();
exit();
}
}
list();
}
// 테이블은 유지하면서 전체 글 삭제 - sql : TRUNCATE TABLE board;
public void clear() {
//System.out.println("clear() 매서드 실행됨");
System.out.println("[전체 게시글 삭제]");
System.out.println("============================");
// 확인, 취소 메뉴
System.out.println("정말로 삭제하시겠습니까?");
System.out.println("1.OK | 2. Cancel");
System.out.print("선택: ");
String menuNo = scanner.nextLine();
if(menuNo.equals("1")) {
// db작업 - TRUNCATE
try {
String sql = "TRUNCATE TABLE board";
pstmt = conn.prepareStatement(sql);
// sql 실행
pstmt.executeUpdate();
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
exit();
}
}
list();
}
public void exit() { // 호출되면 db 연결 종료
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
System.out.println("*** 게시판을 종료합니다 ***");
System.exit(0); // 즉시 종료
}
public static void main(String[] args) {
BoardExample2 board1 = new BoardExample2();
board1.list();
}
}
CSS 공부
<<CSS 개발자 도구>>
f12를 눌러 개발자 도구를 연다 -> 요소를 우클릭, inspect 클릭
=> HTML 요소탐색시 혹은 요소 인스펙터가 뜨고 이걸로 탐색 가능
=> 펼치거나 확대할 수 있고, 밑에서 CSS도 확인 가능
뭔가가 왜 적용되고 적용되지 않는지 모를 경우 그 요소를 선택하면 된다
-> 스타일이 있지만 취소선으로 되어있고 적용되지 않은 경우
= 적용될 뻔했고 적용될 수 있었으나 특이도 경쟁에서 밀렸다는 의미, 순서가 밀렸을 수도 있다
= HTML은 업데이트되지 않지만 매우 유용하게 이것저것 추가, 변경해서
확인하거나 시도해볼 수 있다
<<사용을 지양해야 하는 두가지>>
<인라인 스타일>
= ID, class, 요소 보다 더 명시적인 선택자
요소를 스타일링 하는 하나의 방법
=> 색상을 설정하는 ID가 이미 들어 있어도
인라인 스타일이 더 명시적이기 때문에 인라인 스타일이 적용된다
=> 스타일 시트에 분리돼어 HTML코드에 들어있기 때문에
혼란을 일으킬 수 있다
= 되도록 사용을 지양하는 것이 좋다
<!important>
= 개별 스타일 지정에 사용할 수 있는 선택자
= 이것도 되도록 사용하지 않는 것이 좋다
=> 특성 뒤에 입력하여 사용한다
.foo[style*="color:red"] {
color: firebrick !important;
}
= 브라우저가 이것을 가장 명시적인 지시로 인식하게 한다
다른 어떤 지시보다 우선한다
=> 엄밀히 말하자면 특이도와는 상관 없는 선택자이다
모든 것을 뛰어넘는 예외라고 할 수 있다
-> 반드시 통제할 필요가 없는 외부 라이브러리나 도구를 다룰 때나
무언가를 바꾸거나 덮어쓰고 싶은 경우에 사용된다
<<CSS상속>>
= 구체적인 특서을 지정하지 않은 하위 요소에
상위 항목 특성이 적용되는 것을 말한다
=> 색상 값을 설정하지 않은 하위요소가 특성을 상속받아 스타일이 변한다
=> 하위 항목에 스타일 설정을 하면 상위 항목의 특성을 상속받지 않아
지정한 스타일이 적용된다
(-> 개발자 도구에서 상속된 특성을 확인할 수 있다)
* 일부 요소는 상속받지 않도록 기본 설정이 되어 있다
=> 특성에 :inherit이라고 쓰면 어떤 특성이든 상위 항목의 특성을 상속받도록 설정할 수 있다
* 상속을 아예 못 받는 요소도 있다 -> 테두리의 경우 색상은 상속 가능하지만 다른 특성은 상속 불가
<<박스 모델>>
= CSS의 모든 것이 이 박스 모델 안에 들어간다고 생각하면 된다
박스마다 다른 특성을 갖고 있다
=> 개발자 도구를 열어 페이지에 마우스를 대면 박스가 나타난다
ex. Twitter 아이콘 = 실제 화면에서 나타나는건 새 모양이지만
마우스를 대면 주변에 박스가 만들어진다
=> 브라우저 안의 모든 요소는 박스 형태로 구분하고 각 박스는 특성을 가지고 있다
=> Chrome은 박스에 다른 색상을 입혀서 보여주는 방식을 사용하는데
-> 색상마다 다른 컴포넌트라는 의미이다
* 박스 중앙에는 핵심 콘텐츠가 있다
= 박스 중앙에는 단락의 텍스트와 같은 실질적인 정보가 위치한다
그 주변에는 패딩이 있고 테두리가 둘러져 있고 박스 사이에는 여백이 있다
= 콘텐츠 박스의 특성 => 콘텐츠 레이아웃에 매우 중요한 특성, 콘텐츠의 크기나 모양, 테두리 간격을 바꿀 때 필요
<가로, 세로>
= 가로와 세로 값을 정하는 특성
콘텐츠가 들어가는 영역의 크기를 조정
<테두리>
= 테두리는 특성만 있는게 아니라 테두리와 연관된 특성이 다양하게 있다
=> 테두리의 굵기, 스타일, 색상
상하좌우 각각 다르게도 적용 가능
모서리의 곡률도 조정 가능 등 다양함
= 테두리는 요소를 둘러싸고 있는 박스 모델의 테두리를 말한다
=> 테두리의 역할 = 어디서든 테두리를 볼 수 있고, 웹 페이지를 보기좋게 만드는 데 중요한 역할을 하고
각 요소를 구별하는데 도움이 되고 눈에 띄도록 만들어 준다
ex. 마우스를 갖다 대면 클릭할 수 있다는 걸 사용자가 알 수 있도록 표시가 나타남
* 콘텐츠 박스의 크기가 200px일 때 테두리 두께를 5px로 설정하면
=> 좌,우 테두리 10px + 콘텐츠 박스 200px => 총 210px의 크기만큼 페이지를 차지하게 된다
* 박스 사이징 특성
= border-box => 좌우의 테두리를 기준으로 요소의 크기가 결정됨
요소의 가장 끝에 있는 테두리 선을 기준으로 한다
=> 박스 사이징 특성을 지우면 콘텐츠를 크기의 기준으로 삼는다
= 테두리 두께만큼 크기가 조정된다
=> 때에 따라 두 가지 중 하나를 사용하면 된다
* 속기법
= 테두리의 두께와 색상, 스타일을 설정할 때 한번에 작성하는 특성
=> border
(=> 보통의 테두리 속성 설정 순서 = 두께, 스타일, 색상 순으로 진행된다)
= 속기법의 취지는 여러 가지 특성을 설정할 때 한번에 작성하려는 것
=> 테두리에도 적용이 되는 것이고, 다른 것도 있다
* 모깎기
= 모서리의 곡률을 조정하는 특성
가장자리를 완만하게 만들 수 있다
=> 모서리의 곡률을 다르게 정할 수 있어서 한쪽만 바꿀 수도 있다
= px단위와 백분율 두가지 단위 사용
<패딩>
= 콘텐츠 박스와 요소를 둘러싼 테두리 사이에 남은 공간을 의미
자주 쓰이는 유용한 특성으로써 콘텐츠와 테두리 사이의 공간을 넓혀서 여유를 줄 때 사용
* 속기법
= 네 개의 개별 특성을 한번에 작성하는 특성
=> 단일 값만 적는 방법 = 사방에 설정된 값이 적용
두 개의 다른 값을 설정 = 첫 번째 값은 상단, 하단에 적용, 두 번째 값은 좌측, 우측에 적용
세 가지 값을 설정 = 상단, 좌우, 하단으로 나누어 값을 설정 하는 것
네 개의 값을 따로 설정
<여백>
= 한 요소가 있고 또 다른 요소가 있을 때
두 요소에 둘린 각 테두리 간의 간격을 말한다
=> 패딩은 테두리 안쪽 공간을 다루는 것 -> 여백은 테두리 바깥 공간을 다루는 것
=> 여백도 네 가지 개별 특성이 있다
= 패딩의 속기법과 같은 원리로 구문을 작성하면 된다
-> 기본 여백을 갖고 있는 요소에 값을 0 으로 주면 기본 여백을 지울 수 있다
-> <body> 태그 자체에는 기본적으로 여유 공간이 있다
*CSS
body{
margin: 0;
}
div {
width: 200px;
height: 200px;
background-color: #e5898b;
}
span {
margin-left: 30px;
margin-top: 30px;
}
h1 {
background-color: pink;
width: 200px;
padding-left: 100px;
padding-top: 50px;
margin: 0;
}
#one {
background-color: #e5898b;
border-width: 5px;
border-color: black;
border-style: solid;
box-sizing: border-box;
padding-right: 50px;
margin-left: 50px;
margin-bottom: 100px;
}
#two {
background-color: #b5838d;
border-color: #ffcdb2;
border-width: 3px;
border-style: dashed;
border-left-width: 8px;
margin: 200;
}
#three { /*속기법, 모깎기*/
background-color: #6d6875;
border: 4px solid black;
border-left-style: dotted;
border-radius: 30%;
}
button {
padding: 20px;
padding: 10px 20px;
padding: 10px 20px 30px;
padding: 10px 20px 30px 40px;
}
* HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Box Model Demo</title>
<link rel="stylesheet" href="app4.css">
</head>
<body>
<h1>Hello! <span>:)</span> </h1>
<div id = "one">
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Ratione error similique molestias ipsa vitae temporibus vel non veritatis saepe,
ab exercitationem eaque vero nam natus architecto sed reiciendis iusto id!
</div>
<div id = "two">
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Ratione error similique molestias ipsa vitae temporibus vel non veritatis saepe,
ab exercitationem eaque vero nam natus architecto sed reiciendis iusto id!
</div>
<div id = "three">
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Ratione error similique molestias ipsa vitae temporibus vel non veritatis saepe,
ab exercitationem eaque vero nam natus architecto sed reiciendis iusto id!
</div>
<button>Pad Me!</button>
</body>
</html>
* 브라우저 페이지
Coding Test Practice
Description
1-1. 입력된 수가 짝수라면 2로 나눕니다.
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.
예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다.
위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요.
단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환해 주세요.
function solution(num) {
var answer = 0;
while(num != 1){
if(num % 2 == 0){
num = num / 2;
}else {
num = (num*3) +1;
}
answer++;
if(answer == 500){
return -1;
}
}
return answer;
}
Description
String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요.
seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.
function solution(seoul) {
var answer = '';
for(var i = 0; i < seoul.length; i++){
if(seoul[i].toLowerCase() == "kim"){
answer = "김서방은 " + i + "에 있다";
break;
}
}
return answer;
}
2023. 10. 18 (수)
프로그래머 도전기 51일차 (0) | 2023.10.21 |
---|---|
프로그래머 도전기 50일차 (1) | 2023.10.20 |
프로그래머 도전기 48일차 (1) | 2023.10.17 |
프로그래머 도전기 47일차 (4) | 2023.10.17 |
프로그래머 도전기 46일차 (0) | 2023.10.16 |