callifornia7의 등록된 링크

 callifornia7로 등록된 네이버 블로그 포스트 수는 56건입니다.

계산기 만들어 보기. (Visual studio 2010) [내부링크]

첨부파일 NAObeta.exe 파일 다운로드 우선 #include <Windows.h> 헤더 파일을 추가 해야한다. Sleep(); 함수를 사용하기 위해서이다. Sleep(1000); // 1초 대기. 단위는 ms이다 여기서 사용한 함수들을 do while 반복문, for() 반복문, if else문, 배열이다. #include <stdio.h> #include <Windows.h> int main(void) { int select, first_num = 0, second_num = 0,i=0,j=0; int save[10] ={0},count=0; do{ printf("계산기: \n1.덧셈 6.불러오기\n2.뺄셈\n3.곱셈\n4.나눗셈\n5.종료\n"); scanf_s("%d",&select); if(select==1) { printf("더할 두 개의 수를 입력하시오:"); scanf_s("%d %d",&first_num, &second_num); printf("\n덧셈 결과:%d

문자와 배열. [내부링크]

배열의 초기화는 간단하다. int a[5];라는 배열을 선언했다 치자. a[5]는 a[0]~a[4]까지만 만들어지며 a[5]는 만들어지지 않는다. 조심하자. a[5] = {0};라고 선언시 0~4까지의 배열이 모두 0으로 초기화 된다. a[5] ={1,2,3};이라고 선언시 0~2까지만 1,2,3이 저장되고 나머지3~4에는 0이 저장이 된다. 문자 배열의 경우 char s[10]이라 선언했다 치자. s[10] = "String"; 이라고 선언시. S t r i n g \n (NULL) s[0] s[1] s[2] s[3] s[4] s[5] s[6] s[7~] 이런식으로 저장이 된다. s[10] = {'S','t','r','i','n','g'};이라고 선언시 S t r i n g s[0] s[1] s[2] s[3] s[4] s[5] s[6] s[7~] 이런식으로 저장이 된다. 즉 한마디로.,... char s[10] = "String"; ----> char s[10] = {'S','t'

C++ 영상처리 배우기 #1 (이미지 불러오기) [내부링크]

(나만의 공부 과정을 글로 남겨보자하여 작성을 마음먹고 쓰는 글 입니다. 틀린 맞춤법과 나머지 틀린 정보는 지적해주시면 바로바로 수용하겠습니다. 감사합니다 !) 극동대 대학과정에서 배우기 시작한 C++과 Opencv를 사용하여 영상처리하기이다. 윈도우 환경에서는 Opencv를 사용하기에 편리하지만 MasOS에서는 쉽지가 않았다. 여러 가지 서칭을 하면서 VScode와 Xcode에서 사용하는 법을 찾아보았는데 VScode에서의 사용은 실패하였고 Xcode에서의 사용은 성공하였다. (VScode에서는 왜 안되었던 것인가? 방법을 찾아보아야겠다.) 우선 Opencv를 사용하기 위해서는 전처리기에 #include <opencv2/opencv.hpp>라고 입력을 해야한다. 밑에 입력한 것 처럼 나머지는 왜 안되는지는 모르지만 첫번째 처럼 해야지 된다. #include <opencv2/opencv.hpp> (O) #include <opencv/opencv2.hpp> (X) #include <o

C++ 영상처리 배우기 #2 (컬러에서 흑백으로) [내부링크]

전에 작성하였던 글 #1에서의 마지막 부분에 있는 사진에 보면 if문이 하나가 들어가 있다. if(src.empty()) cout << "영상을 읽을 수 없음!" << endl; 이 if문을 사용한 이유는 어떠한 이유로 인해 영상(이미지)를 읽지 못한다면 NULL(0)이 저장이되는 걸로 알고있다. 따라서 사전에 미리 empty() 함수를 이용하여 영상이 제대로 읽혔는지 검사를 하기 위해 사용하였다. empty()는 data가 NULL인지 판단한다. 즉, 제대로 읽히지 않고 저장이 되었다면 empty()함수는 true를 반환하여 if문 안에 코드가 실행이 될 것이다. 이번에는 불러온 이미지(컬러 이미지 아무거나)를 흑백 이미지로 바꾸어 보려고 한다. 밑에 소스코드를 사용하여 해보자. #include <iostream> #include <opencv2/opencv.hpp> #include <iostream> int main() { Mat src; src = imread("city.jpe

C++ 영상처리 배우기 #3 (영상 뒤집기/반전) [내부링크]

오늘은 영상 뒤집기에 대하여 공부를 간단하게 해보았다. 영상을 뒤집는 방법은 매우 간단하다. 바로 Opencv에서 제공하는 flip() 함수를 사용하는 것이다. 밑에 코드 처럼 작성을 하면 된다. src는 영상을 불러오는 것이며, dst는 반전을 한 영상을 저장하는 것이다. flip(input src, ouput dst, flipcode) 함수 flip(src, dst, 0); // 수평으로 반전 (수직 반전) flip(src, dst, 1); // 수직으로 반전 (수평 반전) flip(src, dst, -1); // 두 축으로 반전 (수직 반전 + 수평 반전) 코드를 작성하여 보겠다. #include <iostream> #include <opencv2/opencv.hpp> using namespace cv; using namespace std; int main(){ Mat src = imread("city1.jpeg", IMREAD_COLOR); if(src.empty()) cou

C++ 영상처리 배우기 #4 (도형 그리기/직선 긋기) [내부링크]

Opencv를 사용하여 도형을 그리는 함수가 있다. line(), rectangle(), circle(), ellipse() 등등 도형 파트는 여러 글로 나누어 작성할 예정이다. 우선 기본적인 line() 함수를 사용해보자 line은 영어 그대로 선 긋기다. 하지만! 그전에 Point(), Scalar() 등 함수에 대하여 알 필요가 있다. 아직은 밑에 2개 정도면 충분하다. //여러가지 자료형이 있지만 간결 표현으로 쓰겠다. //가로와 세로 위치를 2차원 좌표로 나타내기 위한 템플릿 클래스이다. //즉, 사진 속 좌표를 지정해주는 것이다. Point(x축, y축); //이것도 마찬가지로 간결 표현으로 쓰겠다. //간결하게 표현을 하는 이유는 uchar, int, double, float 자료형이 많기 때문이고 간결형으로 사용하여도 //자동으로 정의 해주기 때문이다. //색상을 지정할 때 많이 사용하는 함수이다. Scalar(blue, green, red); 우선 소스코드를 먼저 보

C++ 영상처리 배우기 #5 (도형 그리기/영상의 크기 출력하기) [내부링크]

우선 영상에서 원하는 좌표 값을 얻어야하는데 그전에 사진의 크기를 알아야 하는 경우가 있다. 물론 영상의 속성을 보면 알 수 있기는 하나 Opencv에서 function을 지원하기 때문에 사용을 해보자.. 행(row), 열(column)을 알아야 한다. 행은 가로 방향이며 열은 세로 방향이라고 이해하면 된다. 그러면 소스코드에서 확인해보자. //사용법 img.cols img.rows //이렇게 입력하면 끝이다. //우선 이미지를 불러와야한다. int main(){ Mat dstblack = imread("state.jpeg"); //두번 째 cout << "영상의 가로 폭:" << dstblack.cols << endl; cout << "영상의 세로 폭:" << dstblack.rows << endl; cout << "x축y축(" << dstblack.cols << ", "<< dstblack.rows << ")" << endl; //세번 째 imshow("empire state b

C++ #1 기본 개념. (입력, 출력 객체/iostream) [내부링크]

bit : 0/1을 표현하는 최소 정보 단위 byte : 한 문자를 표현하는 최소 단위 (8bits = 1byte) -> (0~255 의 숫자) or (256가지의 기호로 지정) ASCII 코드 : 미국 ANSI에서 제정한 문자 표준 코드. 고급 프로그래밍 언어 sum = 1 + 2; 어셈블리어 mov ax, 1 add ax, 2 mov[100], ax 기계어 10101110 00000001 10101111 00000010 10110000 01100100 //출력 스트림. #include <iostream> //istream, ostream 으로 나뉘어져 있던 걸 합친 것. int main(){ std::cout << "안녕하세요! C++ 입니다." << std::endl; //std 공간에 속해 있는 cout 출력과 endl(endline) 줄 바꿈 명령어이다. } //출력 스트림. #include <iostream> //istream, ostream 으로 나뉘어져 있던 걸 합친

C++ 영상처리 배우기 #6 (도형 그리기/사각형) [내부링크]

이번에는 사각형 그리기를 할 겁니다. rectangle() 마찬가리고 Opencv에서 지원하는 function 입니다. //#4에서 직선 그리기를 배웠는데요 다시 한번 봅시다. line(입력영상, Point(), Point, Scalar(), 선의 두께); //이렇게 사용한다고 했었습니다! //입력영상은 어떤 영상의 위에 그릴 것이냐를 의미하는 것 입니다. cv::rectangle(); //오늘은 사각형 그리기! rectangle() 함수의 사용 법은 line() 함수와 비슷하고 간단합니다. rectangle(입력영상, Point(), Point, Scalar(), 선의 두께); //line() 함수와 비슷하죠? 자 여기서 질문 사각형 내부는 어떻게 색으로 체울가요? //바로 선의 두께 부분에 Filled하기 위해 -1을 입력을 해주면 Scalar에서 지정한 색으로 꽉 체워집니다. #include <opencv2/opencv.hpp> #include <iostream> using n

백준(beakjoon) 2563번 색종이. [내부링크]

이 문제는 많이 고민하면서 풀었던 문제이다. 혼자서 이렇게 저렇게 작성을 해보다보니 결국에는 칸의 총 갯수가 총 넓이라는 사실을 알아버렸다. 무슨 소리인지는 밑에 코드를 보면 이해가 될 것이다. #include <iostream> using namespace std; int main(){ int N; cin >> N; int x, y; // 0~50 char Map[31][31], Cnt = 49; memset(Map, '0', sizeof(Map)); while(N--){ cin >> x >> y; for(int i = x; i < x + 10; i++){ for(int j = y; j < y + 10; j++){ Map[i][j] = Cnt; } } Cnt++; } for(int i = 0; i < 31; i ++){ for(int j = 0; j < 31; j++){ cout << Map[i][j] << ' '; }cout << endl; } } 위에 코드를 실행해보면 결과는

자바_01 [내부링크]

class FirstJava { public static void main(String[] args) { System.out.println("Hello Java!"); System.out.println("First Java program"); } } 1. public static void main(String[] args) { System.out.println("Hello Java!"); System.out.println("First Java program"); } 위에 코드를 입력하고 실행하면 main 메소드(함수) 안에 있는 문장이 순차적으로 실행된다. 순차적으로 실행되는 방식은 선언 방식과 다르게 위에서 아래로 하나 하나 씩 순서대로 실행된다는 소리이다. 실행 시 터미널에 출력된 결과. 2. class FirstJava { 클래스 이름이 FirstJava이다. 컴파일 시 생성되는 파일의 이름은 FirstJava.class이다. 실행 시 생성되는 파일을 한번 확인 해보자. 실행

안드로이드 스튜디오_버튼 이벤트 처리하기(XML 이용) [내부링크]

버튼을 하나 넣어 왼쪽에 XML 파일을 보면 Button이라는 요소가 생겨있을 것이다. 이 <Button> 요소에 onClick 속성을 추가하는데 클릭 이벤트가 발행하면 onClick 속성에 저장된 메소드가 호출된다고 보면된다. 이 버튼을 가지고 있는 액티비티는 이 메소드를 구현하여야 한다. 밑에 사진처럼 저런 식으로 입력을 하여도 좋고 우측에 디자인 화면에서 버튼을 누루면 속성 창이 나오는데 Declared Attributes에서 onClick 속성을 찾아 onClick라고 입력하면 된다. 즉, onClick은 버튼 클릭 시 "onClick"이라는 메소드를 불러 실행한다. 메소드는 MainActivity.java 파일에 작성하는 것이다. 왼쪽은 수동 입력 오른쪽은 자동 입력. 간혹가다가 빨간 줄로 나타날 수 있는데 제대로 import 되어 있는지 확인하자. View 클래스를 import 해주자. public class MainActivity extends AppCompatActiv

안드로이드 스튜디오 개념 정리. [내부링크]

컴포넌트: 안드로이 애플리케이션은 컴포넌트(component)들로 구성이되는데 애플리케이션을 만드는 빌딩 블록이며, 각 컴포넌트들은 하나의 독립된 엔티티로 존재하고, 정해진 역할을 수행한다. 컴포넌트의 종류 4가지 1.액티비티 (Activity) 2.서비스 (Service) 3.방송 수신자 (Broadcast Receiver) 4.콘텐트 제공자 (Content Provider) 하나의 액티비티. 1.액티비티 : 액티비티는 사용자 인터페이스 화면을 가지고 하나의 작업을 담당하는 컴포넌트이며, 하나의 애플리케이션은 여러 개의 액티비티를 가질 수 있다. 즉, 앱에서의 하나의 화면을 하나의 액티비티라고 보면되며 모든 액티비티들은 Activity라는 클래스를 상속 받아서 작성된다. 2.서비스 : 서비스는 백그라운드에서 실행되는 컴포넌트로 오랫동안 실행되는 작업이나 원격 프로세스를 위한 작업을 할 때 사용하는데, 서비스는 사용자 인터페이스 화면을 가지고 있지 않다. 즉, 배경 음악을 실행하거나

C++ 영상처리 배우기 (1채널 영상,3 채널 영상-1) [내부링크]

우리가 흔히 보는 사진들을 보면 다양한 색상으로 이루어져 예쁘다거나 멋지다고 말하는 사진에는 다양한 색상 정보들이 담겨져 있다. 예를 들어 흑백 영상으로 보자. 아래 사진을 보면 10 X 10 크기의 흰색과 검정으로 이루어진 사진이 있다. 0은 검은색 255는 흰색으로 이러한 사진을 1 채널 영상이라고 한다. 그러면 다양한 색상이 있는 영상은 어떻게 이루어져 있는걸가? 이 사진을 예로 들어보자면 우리가 보는 모든 사진은 R, G, B로 이루어져 있다. R, G, B로 이루어진 영상을 3채널이라고 한다. Blue, Red, Green 이러한 각각의 채널의 영상도 숫자로 각 픽셀을 표현하자면 Blue, Green, Red 이런 식으로 나오는데... 이 3개의 채널을 하나로 합치면 하나의 컬러 영상이 되는 것이다.

안드로이드 스튜디오 개념 정리 -1 [내부링크]

리소스 안드로이드에서 레이아웃, 이미지, 문자열 등은 모두 리소스로 취급이 된다. 레이아웃: 레이아웃이란 화면을 어떻게 구성할 것이냐 하는 것이다라고 보면 된다. 위젯들을 선택하고 어떻게 화면에 배치할 것인지를 레이아웃에서 결정하는데 이러한 위젯들을 어떻게 레이아웃 위에 구성을 하는가가 문제이다. XML: XML을 이용하여 사용자 인터페이스를 나타낸다. 화면의 레이아웃을 나타내는 XML 파일에는 위젯이 포함되어있는데 각각의 위젯들은 XML에서 하나의 요소들로 표현이된다. XML 파일안의 코드와 위젯 옆에 사진은 프로젝트 처음 생성 시 자동으로 선언되어 있는 코드들이다. 하나 씩 코드를 보자. <?xml version="1.0" encoding="utf-8"?> 이 문장은 이 문서가 XML 파일임을 선언하는 것이며, XML의 버전은 1.0이며, XML의 엔코딩이 유니코드 utf-8이라는 것. <androidx.constraintlayout.widget.ConstraintLayout..

배열의 평균값 (프로그래머스) [내부링크]

class Solution { public double solution(int[] numbers) { double sum = 0.0; for(int i = 0; i < numbers.length; i++) sum += numbers[i]; return (sum / numbers.length); } } sum에 먼저 0.0을 저장과 동시에 선언을 한 이유는 나누기 할시 즉, 평균값을 구할 때 소수점도 구하기 위해서이다. //예제 코드 class FirstJava { public static void main(String[] args) { int[] numbers = {1,2,3,4,5,6,7,8,9,10}; double sum = (3*1.0)/2; System.out.println(sum); // 결과 값 1.5 } } ----------------------------------- class FirstJava { public static void main(String[] args)

양꼬치 (프로그래머스) [내부링크]

class Solution { public int solution(int n, int k) { return ( n * 12000 + (k - (n / 10)) * 2000); } } 이 문제는 간단하다. 예를들어 n 인분을 시키면 10인분 마다 음료가 서비스로 1개 씩 나온다 그러면 총 제공된 음료수 개수에서 10인분마다 1개 씩 빼면 되는 것이다. (k - (n / 10)) * 2000

대문자로 바꾸기 (프로그래머스) [내부링크]

이 문제는 매우 간단하다. 단 하나의 내장 함수를 사용하면 자동적으로 소문자를 대문자로 변경하여 준다. class Solution { public String solution(String myString) { return (myString.toUpperCase()); } } 그러면 소문자에서 대문자로 변경하는 함수가 있다면 대문자를 소문자로 변경해주는 함수가 있지 않을가? (있다) class Solution { public String solution(String myString) { return (myString.toLowerCase()); } } 이번에는 함수를 사용하지 않고 알고리즘으로 풀어보았다. class FirstJava { public static void main(String[] args) { String word = "aBcDeFg"; char word1[] = word.toCharArray(); for(int i = 0; i < word.length(); i++){

문자열을 정수로 변환하기 (프로그래머스) [내부링크]

class Solution { public int solution(String n_str) { return Integer.parseInt(n_str); } } 딱 한줄로 끝난다. 바로 문자열 String을 숫자로 변환시켜주는 방법으로 Integer.parseInt(String a);을 사용한다. class FirstJava { public static void main(String[] args) { System.out.println(Integer.parseInt("1004")); // 출력 결과 1004 System.out.println(Integer.parseInt("510")); // 출력 결과 510 int A = Integer.parseInt("10") + Integer.parseInt("10"); System.out.println(A); // 출력 결과 20 } } 이런식으로 사용이 가능하다. class FirstJava { public static void main(Str

문자열 출력하기. [내부링크]

import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String a = scanner.next(); System.out.println(a); } } Scanner 클래스. 이 부분이 신기한 이유가 다른 언어 C나 C++에선 scanf("타입",변수); cin >> 변수; 이런 식으로 키보드로부터 입력을 받아들여왔지만 자바를 처음 배우면서 어? 키보드로부터 입력은 어떻게 받지하면서 검색하며 찾았더니 Scanner가 나온다. // Scanner 클래스를 이용하여 객체를 생성 Scanner scanner; scanner = new Scanner(System.in); new 연산자. new 연산자는 객체를 Heap이라고 하는 메모리 영역에 공간을 할당하여 메모리 주소를 반환한 후 생성자를 실행시켜주는데 즉,

a와 b 출력하기 [내부링크]

import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); System.out.println("a = " + a + "\n" + "b = " + b); } } 이 글 밑 부분에 메소드를 참고하면 nextInt()를 보면 알 수 있다. https://blog.naver.com/kcoding_/223088216710 문자열 출력하기. Scanner 클래스. 이 부분이 신기한 이유가 다른 언어 C나 C++에선 scanf("타입",변수); cin &... blog.naver.com

문자열 반복해서 출력하기 [내부링크]

import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next(); int n = sc.nextInt(); for(int i = n; n > 0 ; n--) System.out.print(str); } } 이번 문제는 새로 알게된 사실이 있다. 여태까지 자바에 System.out. 출력문에 printf라는 출력문이 있는지 몰랐다. 따라서 자바 출력문을 찾아서 공부해보았다. 메소드 서식 특징 System.out.print(변수); 줄바꿈 문자를 포함하지 않고 변수를 그대로 표현. System.out.printf("서식", 변수 ); %d, %f, %c, %s, %o(8진 정수) %x(16진 정수), %%(퍼센트 표시) 등... System.out.println(변수); 줄바꿈 문자를

C++ 영상처리 배우기 #7 (마우스 이벤트 처리) [내부링크]

OpenCV에서는 마 우스나 키보드가 눌리면 발생하는 이벤트를 처리할 수 있다. 이번에 해보았던 것은 마우스 좌측 클릭 시 클릭한 좌표에 무언가 이벤트를 발생시키는 것이다 #include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; void onMouse(int event, int x, int y, int flags, void *param){ if(event == EVENT_LBUTTONDOWN){ Mat& img = *(Mat*)(param); circle(img, Point(x, y), 100, Scalar(0, 255, 0), 10); cout << "x :" << x << " " << "y :" << y << endl; imshow("src orijinal", img); } } int main(){ Mat src = imread("electricity.tiff", IMREAD

C++ 영상처리 배우기 #8 (키보드 이벤트 처리) [내부링크]

이번에는 키보드 입력을 받아 이벤트 처리를 해보았다. int main(){ Mat src = imread("electricity.tiff", IMREAD_COLOR); if(src.empty()) cout << "영상을 읽을 수 없음" << endl; imshow("src orijinal", src); int x = 300, y = 300; while(1){ int key = waitKey(100); // 100밀리초 동안 키를 누루기를 기다린다. if(key == 'q') break; // q를 누루면 반복문 탈출. else if (key == 'a') x -= 40; else if (key == 'w') y -= 40; else if (key == 'd') x += 40; else if (key == 's') y += 40; circle(src, Point(x, y), 20, Scalar(0,255,0), 5); imshow("src", src1); } waitKey(); ret

대소문자 바꿔서 출력하기 [내부링크]

문제는 간단하다. 소문자는 대문자로 대문자는 소문자로 바꿔주면 되는데... import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String a = sc.next(); char[] word1 = a.toCharArray(); for(int i = 0; i < a.length(); i++){ if( 97 <= a.charAt(i) && a.charAt(i) <=122){ word1[i] -= 32; } else word1[i] += 32; } System.out.println(word1); } } length()를 이용하여 문자열 변수 a의 크기를 반환하여 for 문을 돌리며, charAt()을 사용하여 문자열 중에서 원하는 위치에 접근하여 반환하는 메소드를 사용하여 문제를 풀어보았다.

길이에 따른 연산 [내부링크]

정수형 배열의 길이가 11 이상이면 배열안의 모든 원소들의 합을 반환하고, 10이하면 모든 원소들의 곱을 반환한다. class Solution { public int solution(int[] num_list) { int a = 0 , b = 1; if(num_list.length >= 11){ for(int i = 0; i < num_list.length; i++){ a += num_list[i]; } return a; } else{ for(int i = 0; i < num_list.length; i++){ b *= num_list[i]; } return b; } } } 배열의 길이를 구하기 위해 length를 사용하였으며 a 변수에는 합을, b 변수에는 곱을 저장한 값을 반환한다.

덧셈식 출력하기 [내부링크]

import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); System.out.println(a + " + " + b + " = " + (a+b)); } }

C++ 영상처리 배우기 #9 (이벤트 처리 응용) [내부링크]

마우스를 이용하여 기존의 영상을 변경하는 프로그램을 작성을 해보았다. 마우스의 왼쪽 버튼을 누룬 채로 마우스를 움직이면 색이 칠해지는 즉, 브러쉬를 만들어 볼 것이다. #include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; Mat img; int drawing = false; void drawCircle(int event, int x, int y, int, void *param){ if(event == EVENT_LBUTTONDOWN) drawing = true; // 버튼이 눌리면 참으로 변경되어 그림을 그릴 수 있게 한다. else if(event == EVENT_MOUSEMOVE){ if(drawing == true) // 마우스 좌측 버튼을 눌러 활성화가 되었다면 원을 그린다. circle(img, Point(x, y), 3, Scalar(0, 0, 200), 10);

문자열 돌리기 [내부링크]

가로로 입력되어있는 문자열을 세로로 즉, 90도 돌려서 출력하라는 소리이다. 문자열 중에서 문자 하나 출력 후 다음 줄로 넘겨주기를 반복하면된다. import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String a = sc.next(); for(int i = 0; i < a.length(); i++) System.out.println(a.charAt(i)); } }

정수 부분 [내부링크]

이번 문제는 실수 부분을 잘라 정수 부분만 반환하는 것이다. class Solution { // 방법 1. public int solution(double flo) { int answer = (int)flo; // 형 변환을 해주어 integer형의 변수에 저장하여 출력. return answer; } } class Solution { // 방법 2 public int solution(double flo) { return (int)flo; // 형 변환과 동시에 반환. } }

C++ 영상처리 배우기 #10 (이벤트 처리 응용+트랙바) [내부링크]

이번에는 저번 글에 이어서 브러쉬의 색을 조절할 수 있는 트렉바 기능을 넣어 보았다. 트랙바란? OpenCV에서 사용할 수 있는 사용자 인터페이스로 이 트랙바를 이용하여 연속적인 값이나 이산적인 값을 입력할 수 있다. // 트랙바 함수. createTrackbar("트랙바 이름", "창 이름", 값(R,G,B 중 하나), 슬라이더 최대값, 슬라이더가 변경될 때마다 호출되는 콜백 함수, userdata); // 원형은 밑에 createTrackbar(const string& trackbarname, const string& winname, int *value, int count, TrackbarCallback onChange=0, void *userdata=0); // 나는 여기서 트랙바 이름, 창 이름, 값, 최대값 이 4개만 사용하였다. // 콜백 함수를 넣어도 되지만 여기서 아무 역할을 안하기 때문에 안넣었다. #include <iostream> #include <opencv2/

C++ 영상처리 배우기 #11 (비디오 처리, 캠, 영상) [내부링크]

이번에는 비디오 처리에 대해 배워보았다. VideoCapture 클래스를 이용하여 캠과 연결하는데 노트북의 경우, 일반적으로 내장 카메라가 존재하며, 노트북 카메라의 장치 번호는 0이다. 0은 디폴트 값이다. #include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; int main(int ac, char** av){ VideoCapture cap(0); // 자신의 캠을 이용. if(!cap.isOpened()) // 정보가 있다 없다 판별. cout << "동영상을 읽을 수 없음" << endl; namedWindow("frame"); // 창의 이름을 frame이라고 정의 for(;;){ // ";;"는 1, true와 동일하여 무한루프 Mat frame; // 매 프래임을 받아와 저장. cap >> frame; imshow("frame", frame); // 받아온 프레임을

문자열의 앞의 n글자 [내부링크]

이번 문제는 문자열에서 앞에 my_string[0]부터 my_string[n-1]까지의 문자열까지만 반환하는 문제이다. 즉, 문자열을 잘라서 반환하는 것이다. class Solution { // 매우 간단하게 substring()이라는 메소드를 사용하면 내가 원하는 부분만 잘라 출력이 가능하다. public String solution(String my_string, int n) { String answer = my_string.substring(0, n); return answer; } } substring메소드: 이 메소드의 경우 2가지의 형태로 사용하는데... - substring(int startIndex) // startIndex부터 끝까지 문자열 리턴. - substring(int startIndex, endIndex) // startIndex부터 endIndex까지의 문자열을 리턴. 문제를 풀다가 문자열을 자르는 방법이 더 있을것 같아 내가 원하는 부분에서 잘라서 출력하

n 번째 원소까지. [내부링크]

이번 문제는 주어진 정수 리스트에서 주어진 n - 1 번째 원소까지 반환하는 문제이다. class Solution { public int[] solution(int[] num_list, int n) { int[] num_list_n = new int[n]; for(int i = 0; i < n; i++) num_list_n[i] = num_list[i]; return num_list_n; } } 정수 배열을 사용하여 같은 타입의 데이터를 연속된 공간에 나열하는데 주어진 n 만큼의 공간을 new 연산자를 사용하여 값의 목록을 가지고 있지 않지만 향후 n - 1 번째 까지의 원소들을 저장할 공간을 미리 만들어 놓는다. new 연산자로 배열 생성 new 연산자로 배열을 처음 생성할 경우 배열은 자동적으로 기본값으로 초기화 된다. 기본 값은 0이며 다음과 같이 new 연산자로 배열 객체를 생성할 수 있다. 일반 변수는 스택 영역에 할당이 되지만 new 연산자를 통해 생성된 객체는 클래스 타

문자열 정수의 합 [내부링크]

한 자리 정수로 이루어진 문자열의 각 원소들의 총 합을 구하여 반환하는 문제이다. class Solution { public int solution(String num_str) { int sum = 0; for(int i = 0; i < num_str.length(); i++) sum += num_str.charAt(i) - '0'; return sum; } } '0'을 빼는 이유는 아스키 코드 표를 보면 0~9까지의 숫자는 정수로 48~57이다. 예를 들어 밑에 코드를 보자. class FirstJava { public static void main(String[] args) { String num_str = "123456789"; int sum = 0; for (int i = 0; i < num_str.length(); i++) System.out.println(num_str.charAt(i)); } } 예상했듯이 문자로 1~9까지의 숫자가 나온다. class FirstJava

n의 배수 [내부링크]

이번 문제는 간단하다. 주어진 num이 n의 배수이면 1 아니면 0을 반환하는 것인데.... 나누기 연산이 아니라 나머지 연산을 써주면 되는 것이다. 배수라면 딱 맞게 나누어져 나머지가 안생기며, 배수가 아니라면 나머지가 생기기 때문이다. class Solution { public int solution(int num, int n) { if(num % n == 0) return 1; else return 0; } } 또는 비교 연산자와 삼항 연산자를 이용할 수 있었다. class Solution { public int solution(int num, int n) { return num % n == 0 ? 1 : 0; } } num % n 이 0 이면 1을 반환하고 0이 아니라면 0을 반환하는 것이다.

홀짝 구분하기 [내부링크]

이번 문제는 n의 배수와 같은 문제라고 보았다. import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); if(n % 2 == 0) System.out.println(n + " is even"); else System.out.println(n + " is odd"); } } 또는 출력문 하나에 비교 연산자와 삼항 연산자를 이용하여 해결이 가능하였다. import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); System.out.println( n % 2 == 0 ? (n

문자열 곱하기 [내부링크]

이번 문제는 주어진 my_string을 이용하여 주어진 k번 만큼 이어 붙이는 문제이다. class Solution { public String solution(String my_string, int k) { String answer = ""; for(int i = 0; i < k; i++) answer += my_string; return answer; } }

문자열 겹쳐쓰기 [내부링크]

이번 문제는 주어진 my_string에서 주어진 정수 s를 이용하여 overwrite_Stirng의 길이 만큼에 해당하는 부분을 겹치는 문제이다. 이번 문제는 substring() 메소드를 이용한다 substring를 이용하여 내가 원하는 부분의 문자열을 잘라서 사용할 수 있다. https://blog.naver.com/kcoding_/223096733340 글에서 사용한 것에 조금 응용한 버전? 이다. 문자열의 앞의 n글자 이번 문제는 문자열에서 앞에 my_string[0]부터 my_string[n-1]까지의 문자열까지만 반환하는 문제이다. 즉... blog.naver.com class Solution { public String solution(String my_string, String overwrite_string, int s) { String mystr = my_string; // 굳이 문자열 변수를 선언할 필요 없이 매개변수를 이용하여 String ovstr = overw

문자열 섞기 [내부링크]

이번 문제는 2개의 문자열이 주어지는데 두 개의 문자열을 각각 맨 앞의 원소부터 번갈아가며 한번 씩 섞는 것이다. class Solution { // 최소의 메소드만 사용하여 풀어 보았다. public String solution(String str1, String str2) { String answer = ""; for(int i = 0; i < str1.length(); i++){ answer += str1.charAt(i); answer += str2.charAt(i); } return answer; } } + 연산자 : 위에 내가 사용하던 + 연산자는 편리하지만 성능은 좋지 않은 방식이라고 한다. 그 이유는 String 객체는 불변이기 때문에 각각 합칠 때마다 새로 메모리에 할당이되며 위에 상황외에 여러 문자열을 합친다고하면 과도한 메모리 차지가 일어나기 때문이다. 객체가 불변이라는 것은 String 클래스로 생성된 객체는 고정 길이로 되있지만 한 번 작성한 문자열 뒤에 문자

문자 리스트를 문자열로 변환하기 [내부링크]

이번 문제는 문자열 배열(리스트)로 이루어진 것을 이용하여 문자열에 배열에 있는 원소들을 이어 붙이는 것이다. class Solution { public String solution(String[] arr) { String answer = ""; for(int i = 0; i < arr.length; i++) answer += arr[i]; return answer; } } 이번에는 StringBuilder와 StringBuffer를 사용해보았다. String, StringBuffer, StringBuilder 모두 문자열을 저장하고, 관리하는 클래스입니다. 1) String :먼저 String과 다른 클래스(버퍼, 빌더)의 차이점은 불변과 가변에 있다. String은 문자열을 대표하는데 내가 유용하게 아주 자주 사용하는 클래스이다. 내가 자주 사용하는 String 객체는 한번 생성되면 할당된 메모리 공간이 변하지 않으며, + 연산자 또는 concat 메서드를 통해 기존에 생성된 S

더 크게 합치기 [내부링크]

이번 문제는 두 개의 정수가 주어지는데 이 두개의 정수를 더하는 것이 아닌 합치는 것이다. 일의 자리 또는 십의 자리에 붙이는 것이다. class Solution { public int solution(int a, int b) { String ab, ba; ab = Integer.toString(a) + Integer.toString(b); ba = Integer.toString(b) + Integer.toString(a); if(Integer.parseInt(ba) > Integer.parseInt(ab)) return Integer.parseInt(ba); else return Integer.parseInt(ab); } } 우선 두개의 주어진 정수를 문자열로 앞 뒤 순서를 바꾸어 서로 더하여 저장하며, 이 더하여 저장된 문자열을 if문을 통하여 다시 정수로 변환하여 둘 중 더 큰 숫자를 반환하였다. class Solution { public int solution(int a, i

두 수의 연산값 비교하기 [내부링크]

이번 문제는 + 연산자를 이용하여 연결한 문자열의 정수형 숫자와 2 * a * b의 결과 값들 중 비교하여 더 큰 값을 반환하는 것인데 만약 비교한 값이 서로 같다면 + 연산자를 이용하여 연결한 문자열의 정수형을 반환하는 것이다. class Solution { public int solution(int a, int b) { String ab = Integer.toString(a) + Integer.toString(b); if(Integer.parseInt(ab) < 2 * a * b) return 2 * a * b; else // if 조건에 두 수가 같은 경우를 안쓴 이유는 같을 때 반환하는 값과 + 연산하여 // 변환한 값이 클 때의 반환하는 값이 같기 때문이다. return Integer.parseInt(ab); } } 관계 연산자와 삼항 연산자를 이용한 코드도 작성해보았다. class Solution { public int solution(int a, int b) { Stri

n보다 커질 때까지 더하기 [내부링크]

정수가 저장되어있는 numbers 배열과 정수 n이 매개변수로 주어지는데 numbers의 원소를 앞에서부터 하나씩 더하다가 그 더한 값이 n보다 커지는 순간 여태까지 더했던 합을 반환하는 문제이다. class Solution { public int solution(int[] numbers, int n) { int answer = 0; for(int i = 0; i < numbers.length; i++){ if(answer <= n) answer += numbers[i]; else break; } return answer; } }

flag에 따라 다른 값 반환하기 [내부링크]

이번 문제는 flag가 true이면 더하기 false이면 뺄셈을 하는 문제이다. class Solution { public int solution(int a, int b, boolean flag) { return flag == true ? a + b : a - b; } }

공배수 (나머지 연산) [내부링크]

이번 문제는 주어진 number가 n의 배수이면서 m의 배수이면 1을 반환 두 조건을 충족하지 못한다면 0을 반환하는 문제이다. 즉, 나머지 연산을 이용하는 것인데 나머지 연산을 사용해서 0이 아니라면 number가 n의 그리고 m의 배수가 아니라는 소리이다. class Solution { public int solution(int number, int n, int m) { return (number % n == 0 && number % m == 0) ? 1 : 0; } }

문자열로 변환 (toString 메소드 사용) [내부링크]

이번 문제는 주어진 정수 n을 문자열로 변환하는 문제이다. Integer.toString() : toString() 메소드는 가장 많이 사용하는 숫자를 문자로 변환하는 형 변환 방법이며, 그리고 정석처럼 이용되어오는 방식입니다.. toString()을 사용한 방식을 가장 권장한다고 한다. 여기서 공부하며 새로 알게된 사실은 String.valueOf() 메소드도 Integer.toString() 메소드와 동일한 기능을 제공하는데 Integer.toString() 메소드를 호출하여 변환한다는 것을 알게되었다. Integer.toString과 String.valueOf()의 차이점 : 그러면 String.valueOf()는 왜 있는 것일가? 이 둘의 차이는 간단하다. 만약 NULL이 있다고치자 String.valueOf()는 NULL을 문자열로 처리하는 반면에 Integer.toString()은 NULL로 인해 오류가 발생한다. 만약 입력된 문자열이 Null이라면 두 함수의 대응점이 다

문자열의 뒤의 n글자 (substring) [내부링크]

class Solution { public String solution(String my_string, int n) { String answer = my_string.substring(my_string.length() - n); return answer; } } 이번문제는 주어진 my_string 문자열의 맨 뒤에서부터 n 번째 원소까지의 문자열을 반환하는 것이다. 따라서 문자열의 총 길이에 n을 빼주면 된다.

원소들의 곱과 합 (ㅣength) [내부링크]

이번 문제는 num_list에 저장되어 있는 모든 원소들의 곱과 모든 원소들의 합의 제곱을 비교하는 문제이다. 모든 원소들의 곱이 더 클 경우 0을 반환하며 작을 시 1을 반환한다. class Solution { public int solution(int[] num_list) { int answer = 1, answer1 = 0; for(int i = 0; i < num_list.length; i++){ answer *= num_list[i]; answer1 += num_list[i]; } answer1 *= answer1; return answer > answer1 ? 0 : 1; } }

조건에 맞게 수열 변환하기 3 (length) [내부링크]

이번 문제는 정수 배열 arr과 자연수 k가 주어지는데 k가 홀수라면 arr의 모든 원소에 k를 곱하고 짝수라면 모든 원소에 k를 더한 배열을 반환한다. class Solution { public int[] solution(int[] arr, int k) { if(k % 2 == 0) for(int i = 0; i < arr.length; i++) arr[i] += k; else for(int i = 0; i < arr.length; i++) arr[i] *= k; return arr; } }

특정한 문자를 대문자로 바꾸기 (toCharArray) [내부링크]

이번 문제는 주어진 alp를 이용하여 my_string 문자열에서 각 원소에서 alp와 같은 형태의 문자와 원소에 저장된 문자가 같다면 대문자로 변환하는 문제이다. class Solution { public String solution(String my_string, String alp) { char[] arr = my_string.toCharArray(); for(int i = 0; i < arr.length; i++) if(my_string.charAt(i) == alp.charAt(0)) arr[i] -= 32; return String.valueOf(arr); } }

카운트 업 (for) [내부링크]

이번 문제는 for문을 이용하여 주어진 start를 시작으로 end까지 반복하며, end - start + 1개의 원소를 가질 수 있는 정수 배열에 저장하여 반환하는 것이다. end - start 뒤에 + 1 을 하는 이유는 예를 들어 start가 1, end가 4라면 결과 값으로는 [1, 2, 3, 4] 4개가 나오며 이 4개의 원소를 저장할 수 있는 배열이 있어야 하는데 end - start는 3 즉, 3개의 원소를 담을 수 있는 배열이 만들어지기 때문이다. class Solution { public int[] solution(int start, int end) { int[] count = new int[end - start + 1]; for(int i = start; i <= end; i++) count[i-start] = i; return count; } }

홀짝에 따라 다른 값 반환하기 [내부링크]

이번 문제는 주어진 매개변수 n이 홀수면 1~n까지 숫자 중 홀수인 숫자들의 합을 반환하고 짝수라면 1~n까지 숫자 모든 짝수들의 제곱의 합을 반환하는 것이다. class Solution { public int solution(int n) { int sum = 0; if(n % 2 == 0) for(int i = 1; i <= n; i++){ if(i % 2 == 0) sum += (i * i); } else for(int j = 1; j <= n; j++) if(j % 2 != 0) sum += j; return sum; } } class Solution { // 굳이 이런 식으로 할 필요는 없다.. 그저 컴파일 속도를 알아보고 싶어서 해봤다. public int solution(int n) { int even = 0, odd = 0; for(int i = 1; i <= n; i++){ even += i % 2 == 0 ? i * i : 0; odd += i % 2 == 0 ? 0

정수 찾기 [내부링크]

class Solution { public int solution(int[] num_list, int n) { byte check = 0; // boolean으로 true 또는 false를 반환하려고 했지만 안된다. for(int i = 0; i < num_list.length; i++) if(num_list[i] == n){ check = 1; return check; } return check; } }

공백으로 구분하기 1 (split) [내부링크]

이번 문제는 문자열을 잘라서 문자열 배열에 저장하는 문제이다. 밑에느 제출용 소스코드이다. // 제출용 소스 코드 class Solution { public String[] solution(String my_string) { String[] my_string_arr = my_string.split(" "); return my_string_arr; } } split() : split 메소드는 내가 원하는 (특정 문자)를 기준으로 문자열을 잘라 배열에 저장할 때 사용하는 메소드이다1.split(String regex); class FirstJava { public static void main(String[] args) { String my_string = "i love you"; String[] my_string_arr = my_string.split(" "); // 공백 기준으로 문자열을 자름. System.out.println("결과 : " + Arrays.toString(my_s

부분 문자열인지 확인하기 (contains 메소드) [내부링크]

이번 문제는 주어진 문자열 my_string에서 주어진 target 문자열이랑 같은 부분이 있는지 찾는 것이다. my_stirng 문자열에서 각 원소들을 하나 씩 보며 target의 각 원소와 순서 그리고 문자 형태가 같은지 보는 것이다. 말이 조금 어렵기는 한데 밑에 코드를 보면 쉽ㄷㅏ. class Solution { // 제출용 코드 public int solution(String my_string, String target) { if(my_string.contains(target)) return 1; else return 0; } } contains(CharSequence s) : contains() 메소드는 대상이되는 문자열(MY_STIRNG)에 주어진 문자열(매개변수)이 포함이 되어 있는지 확인하는 메소드이다. 같은 부분이 있다면 boolean true을 반환하며 같은 부분이 없다면 boolean false를 반환한다. class FirstJava { // contains(