상세 컨텐츠

본문 제목

프로그래머 도전기 49일차

프로그래머가 될거야!

by Choyee 2023. 10. 19. 07:44

본문

오늘은

오늘은 수요일입니다 일주일의 중간이죠

힘을 내야겠습니다~

 

 

 

학원 수업

<<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>

 

* 브라우저 페이지

0123

 

 

 

 

 

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 (수)

관련글 더보기