반응형

* 본 문제와 풀이의 저작권은 매일프로그래밍에 있습니다.






정수 배열과 타겟값이 주어지면, 합이 타겟값이 되는 두 원소의 인덱스를 찾아라.





예제 }



Input : [2, 5, 6, 1, 10], 타겟값 : 8


Output : [0, 2] // 배열[0] + 배열[2] = 8










반응형
반응형

* 본 문제와 풀이의 저작권은 매일프로그래밍에 있습니다.






먼저, 팰린드롬(palinedrome)이란 앞에서부터 읽으나 뒤에서부터 읽으나 똑같은 단어를 말한다.



정수 n에 대하여 팰린드롬인지 알아내는 방법을 구현하면 되고, 정수를 문자열로 변경해서는 안된다.





예제}



Input : 12345


Output : False


Input : -101


Output : False


Input : 11111


Output : True


Input : 12421


Output : True











반응형
반응형

사용자 환경 : macOS Sierra 10.12.65.7.20 MySQL Community Server (GPL)






안드로이드로 MySQL에 관한 개발을 하던 도중 다음과 같은 에러가 발생했다.



mysqli_connect(): (HY000/2002): No such file or directory in (중략)



열심히 구글링을 했었고, 여러 해결 방법이 나와 있었다. 기본적으로 서버가 안켜져있는 경우에 발생한다고 한다.



하지만, 서버는 너무나 잘 켜져있었다. 맥북을 한 번 밀고 다시 개발환경 세팅한 거라 환경 설정이 다 안되었다고 판단하고 예전 기억을 떠올렸다.



분명 소켓에 관한 설정을 했던 것 같아 다시 구글링을 해서 해결 했다. 해결 방법은 다음과 같다.





우선 터미널을 열고 폴더 하나를 만든다.

$> sudo mkdir /var/mysql




다음, 소켓에 대한 심볼릭 링크를 지정한다.

$> sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock




다시 앱을 실행한 결과, 에러가 사라졌다.





또 하나 임시 해결 방안이 있다.



php 파일에서 다음 localhost를 127.0.0.1로 변경하면 소켓 설정 없이 해결할 수 있었다.


$conn=mysqli_connect('localhost', 'root', 'PASSWORD', 'DATABASE');





반응형
반응형

* 본 문제와 풀이의 저작권은 매일프로그래밍에 있습니다.






정수 n이 주어지면, n개의 여는 괄호 "("와 n개의 닫는 괄호 ")"로 만들 수 있는 괄호 조합을 모두 구하라.



예제}


Input : 1


Output : ["()"]



Input : 2


Output : ["(())", "()()"]



Input : 3


Output : ["((()))", "(())()", "()(())", "()()()"]






반응형
반응형

* 본 문제와 풀이의 저작권은 매일프로그래밍에 있습니다.






우선 피보나치란, 0과 1로 시작하며 다음 피보나치 수는 바로 앞의 두 피보나치 수의 합이 된다.


이때, 주어지는 정수 n보다 작은 피보나치 수 중 모든 짝수의 합을 구하라.



예제}


Input : n = 12


Output : 10 // 0, 1, 2, 3, 5, 8 중 짝수인 2 + 8 = 10






반응형
반응형

* 본 문제와 풀이의 저작권은 매일프로그래밍에 있습니다.






정수 배열(int array)가 주어지면 가장 큰 이어지는 원소들의 합을 구하시오. 단, 시간복잡도는 O(n).



예제}


Input : [-1, 3, -1, 5]


Output : 7 // 3 + (-1) + 5



Input : [-5, -3, -1]


Output : -1 // -1



Input : [2, 4, -2, -3, 8]


Output : 9 // 2 + 4 + (-2) + (-3) + 8






반응형
반응형

사용자 환경 : macOS Sierra 10.12.6






PHP로 MySQL에 접근하는 예제를 여러 개 봤었다면 mysql과 mysqli를 봤었을 것이다.



본인도 처음 봤을 때 둘의 차이점에 대해 궁금증을 가지게 되었는데 생각보다 단순했다.



mysqli 키워드는 php5 버전 이후부터 지원되며 기존의 mysql 키워드보다 보안, 속도면에서 향상되었다.



또 하나, 작은 차이점은 mysql_query()와 mysqli_query()의 파라미터 값 순서가 다르다는 것이다.



1.mysql

<?php
	$connect=mysql_connect('localhost', 'root', 'PASSWORD');
	$db=mysql_select_db("DB_NAME", $connect);
?>





2. mysqli

<?php
	$conn=mysqli_connect('localhost', 'root', 'PASSWORD', 'DB_NAME');
?>





이와 같은 차이가 있다.



mysqli이 보안과 속도가 더 좋다고 하니 이를 사용하는 것이 좋겠다.

반응형

'Develop - > PHP' 카테고리의 다른 글

[Solution] PHP 전달된 파라미터 값 확인하기  (1) 2018.08.15
반응형

사용자 환경 : macOS Sierra 10.12.65.7.20 MySQL Community Server (GPL)






MySQL을 사용하다보면 한글을 입력하고 싶을 때가 있으나 기본적인 설정으로는 한글이 깨져 보인다.



이 문제를 해결해보고자 하며 여기에는 여러 방법이 있으나 그 중 일부만을 설명한다.





1. 데이터베이스 생성 시 설정

mysql> create database DB_NAME default character set utf8 collate utf8_general_ci;

DB_NAME은 데이터베이스명을 뜻한다.





2. 기존 생성되어 있는 데이터베이스의 설정

mysql> alter database DB_NAME default character set utf8 collate utf8_general_ci;





3. 테이블 생성 시 설정

mysql> create table TABLE_NAME (
    -> id int(4) primary key,
    -> ...
    -> ) default character set utf8 collate utf8_general_ci;

TABLE_NAME 역시 테이블명을 뜻한다.





4. 기존 생성되어 있는 테이블의 설정

mysql> alter table TABLE_NAME default character set utf8 collate utf8_general_ci;


반응형
반응형

게시글은 분명 안드로이드와 MySQL 밖에 없는데 유입 키워드에는 안드로이드 하나밖에..



S 클래스, C 클래스가 있는걸 보니 안드로이드의 소스 코드 중 class가 있는 것 때문이라고 생각되는데



이거 어떻게 해야 하는지 .. ^^

반응형
반응형

사용자 환경 : macOS Sierra 10.12.6Android Studio 3.0.1 {

  Build #AI-171.4443003, built on November 10, 2017

  JRE: 1.8.0_152-release-915-b08 x86_64

  JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o

  }






이번에는 커스텀 리스트뷰에 대해 알아보고자 한다.



먼저 이 앱의 최종 화면은 다음과 같다.





각 아이템을 클릭 시 맨 우측에 좋아요 숫자가 올라가는 기능도 구현할 예정이다.



1. 프로젝트를 생성한다.




2. 해당 파일을 받고 앞축을 푼 후 android 폴더에 있는 다음 폴더들을 전부 복사한다.

ic_thumb_up_black_18dp.zip



2-1. 다시 안드로이드 스튜디오로 돌아와 프로젝트 뷰로 변경 후 다음 경로를 찾아 복사한다.





2-2. res 폴더를 클릭후 복사(Ctrl + v)한다.



이로써 개발에 앞서 모든 준비가 완료되었다. 본격적으로 코딩을 시작해보자.




3. 리스트뷰에 사용될 아이템을 지닌 클래스를 생성한다. ListviewItem.java

public class ListviewItem {

    private String strName;
    private int nId, nLike;

    public String getStdName() {
        return stdName;
    }

    public void setStrName(String strName) {
        this.strName = strName;
    }

    public int getId() {
        return nId;
    }

    public void setId(int nId) {
        this.nId = nId;
    }

    public int getLike() {
        return nLike;
    }

    public void setLike(int nLike) {
        this.nLike = nLike;
    }
}

line 3. strName은 최종 실행화면의 C, Java 등을 나타내는 제목이다.


line 4. nId, nLike는 역시 최종 실행화면의 맨 좌측과 우측의 숫자를 나타낸다.





4. 리스트뷰 레이아웃 설정한다. layout_listview.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="1">

    <TextView
        android:id="@+id/txt_id"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="0.1"
        android:gravity="center"/>

    <TextView
        android:id="@+id/txt_name"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="0.7"
        android:textStyle="bold"
        android:gravity="center"/>

    <ImageView
        android:id="@+id/img_up"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="0.1"
        android:gravity="center"
        android:src="@drawable/ic_thumb_up_black_18dp"/>

    <TextView
        android:id="@+id/txt_like"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="0.1"
        android:gravity="center"/>
</LinearLayout>





5. 리스트뷰를 사용할 어댑터 클래스를 생성한다. ListviewAdapter.java

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.ArrayList;

public class ListviewAdapter extends BaseAdapter {

    private ArrayList<listviewitem> arrayList;
    private int nId;

    public ListviewAdapter() {
        arrayList = new ArrayList<listviewitem>();
        nId = 0;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        final Context context = viewGroup.getContext();

        ListviewItem listItem = arrayList.get(i);

        if (view == null) {
            LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.layout_listview, viewGroup, false);
        }

        TextView id = (TextView)view.findViewById(R.id.txt_id);
        TextView name = (TextView)view.findViewById(R.id.txt_name);
        TextView like = (TextView)view.findViewById(R.id.txt_like);

        id.setText(String.valueOf(listItem.getId()));
        name.setText(listItem.getStdName());
        like.setText(String.valueOf(listItem.getLike()));

        return view;
    }

    public void addItem(String name) {
        ListviewItem item = new ListviewItem();

        item.setId(++nId);
        item.setStdName(name);
        item.setLike(0);

        arrayList.add(item);
    }

    @Override
    public int getCount() {
        return arrayList.size();
    }

    @Override
    public Object getItem(int i) {
        return arrayList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }
}





6. activity_main.xml을 레이아웃 설정한다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.ahn.customlistview.MainActivity">

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ListView>

</LinearLayout>





7. 마지막으로 메인 액티비티에서 기능을 구현해보자.

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {

    private String[] lang = {
            "C",
            "Java",
            "PHP",
            "Swift"
    };

    private ListView listView;
    private ListviewAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        adapter = new ListviewAdapter();

        listView = (ListView)findViewById(R.id.listview);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View v, final int position, long id) {
                // get item
                ListviewItem item = (ListviewItem)parent.getItemAtPosition(position);

                int getLike = item.getLike();
                item.setLike(++getLike);
                adapter.notifyDataSetChanged();
            }
        });

        initList();
    }

    public void initList() {
        for(int i=0; i<lang.length; i++) {
            adapter.addItem(lang[i]);
            adapter.notifyDataSetChanged();
        }
    }
}

line 9~14. 리스트뷰에 사용될 아이템 제목들이다.


line 27. 전에 생성했던 어댑터를 리스트뷰에 세팅한다.


line 32. 리스트를 클릭 시 해당 아이템의 번호를 인덱스로 하여 참조를 얻는다.


line 34~36. 좋아요를 +1 시키는 작업을 하고나서 데이터가 변경되었음을 알린다.


line 43. C, Java 등을 리스트에 추가한다.





이로써 커스텀 리스트뷰를 사용할 수 있게 되었다.

반응형

+ Recent posts